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

本文详细记录了从cocos2dx2.0升级至3.0过程中遇到的一些关键变化,包括CC结构、事件处理、回调函数、点触事件、物理引擎等方面,并提供了相应的示例代码。帮助开发者更顺利地过渡到新的版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

最近接手项目从cocos2dx 2.0 升级为 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"); 

原文:http://my.oschina.net/ffs/blog/279823
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(&__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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值