您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx2.0升级为3.0一些常见变化纪录

2014-06-08 22:11 381 查看
最近接手项目从cocos2dx 2.0 升级为 3.0 ,至于为什么要升级我也弄不清楚,只感觉3.0是要摆脱cocos2d-iphone的身影,这是要作死的态度吗,没时间去了解3.0的核心发生了神马变化,只为了从cocos2dx2.0经常适应到3.0做了一些纪录,以便查阅和方便正在从2.0到3.0的朋友。

1.去CC

之前2.0的CC**,把CC都去掉,基本的元素都是保留的

2.0

CCSprite  CCCallFunc CCNode ..

3.0

Sprite CallFunc Node ..

2.cc***结构体改变

2.0        

ccp(x,y)        

ccpAdd(p1,p2)

ccpSub

ccpMult

ccpLength(p)

ccpDot(p1,p2);

ccc3()

ccc4()

ccWHITE

CCPointZero

CCSizeZero



2.0

Point(x,y)

p1+p2;

p1-p2

p1*p2

p.getLength()

p1.dot(p2)

Color3B()

Color4B()

Color3B::WHITE

Point::ZERO

Size:ZERO



3.shared***改变

2.0

CCSize winSize = CCDirector::sharedDirector()->getWinSize();

SpriteFrameCache::sharedSpriteFrameCache()

AnimationCache::sharedAnimationCache()

NotificationCenter::sharedNotificationCenter()



3.0

Size size = Director::getInstance()->getWinSize();

SpriteFrameCache::getInstance()

AnimationCache::getInstance()

NotificationCenter::getInstance()



4.POD类别

使用const为Point,Size,Rect进行常量修饰

2.0
void setPoint(CCPoint p)

3.0
void setPoint(const Point& p)

5.点触事件

此部分全面更新采用Event Listener

auto dispatcher = Director::getInstance()->getEventDispatcher();

auto touchListener = EventListenerTouchOneByOne::create();

touchListener->onTouchBegan = CC_CALLBACK_2(FBMainScene::onTouchBegan,this);

touchListener->onTouchMoved = CC_CALLBACK_2(FBMainScene::onTouchMoved,this);

touchListener->onTouchEnded = CC_CALLBACK_2(FBMainScene::onTouchEnded, this);

dispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);

bool FBMainScene::onTouchBegan(Touch *touch,Event *pEvent){

    CCLOG("onTouchBegan");

    Point point = this->convertToWorldSpace(this->convertTouchToNodeSpace(touch));

    return true;

}

void FBMainScene::onTouchMoved(Touch *touch,Event *pEvent){

    CCLOG("onTouchMoved");

}

void FBMainScene::onTouchEnded(Touch *touch,Event *pEvent){

    CCLOG("onTouchEnded");

}

//获得触点的方法也发生了改变:

Point point = this->convertToWorldSpace(this->convertTouchToNodeSpace(touch));

//dispatcher控制方法:

dispatcher->addEventListener…

dispatcher->removeEventListener(listener);

dispatcher->removeAllListeners();

6.CC_CALLBACK_*

CC_CALLBACK_0 CC_CALLBACK_1 CC_CALLBACK_2 CC_CALLBACK_3

回调函数,分别携带不同的参数,方便

2.0

CCMenuItemFont *item = CCMenuItemFont::create("返回上个场景", this, menu_selector(GameScene::backScene));

3.0

MenuItemFont *item = MenuItemLabel::create("返回上个场景", CC_CALLBACK_1(GameScene::backScene, this));

// new callbacks based on C++11
#define CC_CALLBACK_0(__selector__,__target__, 

) std::bind(&__selector__,__target__, ##__VA_ARGS__)
#define CC_CALLBACK_1(__selector__,__target__, 

) std::bind(&__selector__,__target__, std::placeholders::_1, ##__VA_ARGS__)
#define CC_CALLBACK_2(__selector__,__target__, 

) std::bind(&
4000
__selector__,__target__, std::placeholders::_1, std::placeholders::_2, ##__VA_ARGS__)
#define CC_CALLBACK_3(__selector__,__target__, 

) std::bind(&__selector__,__target__, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3 ##__VA_ARGS__)

7.使用"Function"对象

CallFunc::create([&](){

        Sprite *sprite = Sprite::create("s");

        this->addChild(sprite);

});

8.使用clone代替copy

2.0

CCMoveBy *action = (CCMoveBy*) move->copy();

action->autorelease();

3.0

action = move->clone();

不需要autorelease,在clone已经实现。

9.Physics Integration 物理引擎

暂无使用,box2d 在 3.0中可以延续使用

在3.0的Physics中需要定义 PhysicsWorld, PhysicsBody, PhysicsShape, PhysicsJoint 等,于box2d相仿,使用前需要定义CC_USE_PHYSICS

……继续等待补充

----------------------------------------

by 陈于喆 
QQ:34174409
Mail: dongbule@163.com

------转自:http://www.blogjava.net/dongbule/archive/2013/12/27/408140.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: