学习笔记 cocos2d-x 2.x到3.x的改动与区别

来源:互联网 发布:彩票号码组合软件 编辑:程序博客网 时间:2024/05/18 17:43

最近一直在做一个项目从2.2.6移植到3.11,但是cocos2d-x 2.x和3.x差别比较大,因此网上参考了许多前辈的帖子和博客总结了一下,留着以后备用。


区别1.去CC之前2.0的CC**,把CC都去掉,基本的元素都是保留的2.0CCSprite  CCCallFunc CCNode ..3.0Sprite CallFunc Node ..   区别2.cc***结构体改变2.0        ccp(x,y)        ccpAdd(p1,p2)ccpSubccpMultccpLength(p)ccpDot(p1,p2);ccc3()ccc4()ccWHITECCPointZeroCCSizeZero3.0Point(x,y)p1+p2;p1-p2p1*p2p.getLength()p1.dot(p2)Color3B()Color4B()Color3B::WHITEPoint::ZEROSize:ZERO   区别3.shared***改变(单例机制使用语法)2.0CCSize winSize = CCDirector::sharedDirector()->getWinSize();SpriteFrameCache::sharedSpriteFrameCache()AnimationCache::sharedAnimationCache()NotificationCenter::sharedNotificationCenter()…3.0Size size = Director::getInstance()->getWinSize();SpriteFrameCache::getInstance()AnimationCache::getInstance()NotificationCenter::getInstance()   区别4.POD类别2.0CCPoint CCSizeCCRect3.0Vec2SizeRect   区别5.点触事件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.CallFunc使用(使用"Function"对象)CallFunc::create([&](){        Sprite *sprite = Sprite::create("s");        this->addChild(sprite);});   区别7.使用clone代替copy2.0CCMoveBy *action = (CCMoveBy*) move->copy();action->autorelease();3.0action = move->clone();不需要autorelease,在clone已经实现。   区别8.Physics Integration 物理引擎暂无使用,box2d 在 3.0中可以延续使用在3.0的Physics中需要定义 PhysicsWorld, PhysicsBody, PhysicsShape, PhysicsJoint 等,于box2d相仿,使用前需要定义CC_USE_PHYSICS   区别9.容器2.0CCArray3.0cocos2d::Vector<T>cocos2d::Map<K,V>cocos2d::Value


cocos2dx2.x&3.x部分函数对照表


| v2.1 names | v3.0 names |  
| ccp | Point |  
| ccpNeg | Point::- |  
| ccpAdd | Point::+ |  
| ccpSub | Point::- |  
| ccpMult | Point::* |  
| ccpMidpoint | Point::getMidpoint |  
| ccpDot | Point::dot |  
| ccpCrosss | Point::cross |  
| ccpPerp | Point::getPerp |  
| ccpRPerp | Point::getRPerp |  
| ccpProject | Point::project |  
| ccpRotate | Point::rotate |  
| ccpUnrotate | Point::unrotate |  
| ccpLengthSQ | Point::getLengthSq() |  
| ccpDistanceSQ | Point::getDistanceSq | 
| ccpLength | Point::getLength |  
| ccpDistance | Point::getDistance |  
| ccpNormalize | Point::normalize |  
| ccpForAngle | Point::forAngle |  
| ccpToAngle | Point::getAngle |  
| ccpClamp | Point::getClampPoint |  
| ccpFromSize | Point::Point |  
| ccpCompOp | Point::compOp |  
| ccpLerp | Point::lerp |  
| ccpFuzzyEqual | Point::fuzzyEqual |  
| ccpCompMult | Point::Point |  
| ccpAngleSigned | Point::getAngle |  
| ccpAngle | Point::getAngle | 
| ccpRotateByAngle | Point::rotateByAngle |  
| ccpLineInersect | Point::isLineIntersect |  
| ccpSegmentIntersect | Point::isSegmentIntersect |  
| ccpIntersectPoint | Point::getIntersectPoint |  
| CCPointMake | Point::Point |  
| CCSizeMake | Size::Size |  
| CCRectMake | Rect::Rect |  
| PointZero | Point::ZERO |  
| SizeZero | Size::ZERO |  
| RectZero | Rect::ZERO |  
| TiledGrid3DAction::tile | TiledGrid3DAction::getTile |  
| TiledGrid3DAction::originalTile | TiledGrid3DAction::getOriginalTile |  
| TiledGrid3D::tile | TiledGrid3D::getTile |  
| TiledGrid3D::originalTile | TiledGrid3D::getOriginalTile |  
| Grid3DAction::vertex | Grid3DAction::getVertex |  
| Grid3DAction::originalVertex | Grid3DAction::getOriginalVertex |  
| Grid3D::vertex | Grid3D::getVertex |  
| Grid3D::originalVertex | Grid3D::getOriginalVertex |  
| Configuration::sharedConfiguration | Configuration::getInstance |  
| Configuration::purgeConfiguration | Configuration::destroyInstance() |  
| Director::sharedDirector() | Director::getInstance() |  
| FileUtils::sharedFileUtils | FileUtils::getInstance |  
| FileUtils::purgeFileUtils | FileUtils::destroyInstance |  
| EGLView::sharedOpenGLView | EGLView::getInstance |  
| ShaderCache::sharedShaderCache | ShaderCache::getInstance |  
| ShaderCache::purgeSharedShaderCache | ShaderCache::destroyInstance |  
| AnimationCache::sharedAnimationCache | AnimationCache::getInstance |  
| AnimationCache::purgeSharedAnimationCache | AnimationCache::destroyInstance |  
| SpriteFrameCache::sharedSpriteFrameCache | SpriteFrameCache::getInstance |  
| SpriteFrameCache:: purgeSharedSpriteFrameCache | SpriteFrameCache::destroyInstance |  
| NotificationCenter::sharedNotificationCenter | NotificationCenter::getInstance |  
| NotificationCenter:: purgeNotificationCenter | NotificationCenter::destroyInstance |  
| Profiler::sharedProfiler | Profiler::getInstance |  
| UserDefault::sharedUserDefault | UserDefault::getInstance |  
| UserDefault::purgeSharedUserDefault | UserDefault::destroyInstance |  
| Application::sharedApplication | Application::getInstance |  
| ccc3() | Color3B() |  
| ccc3BEqual() | Color3B::equals() |  
| ccc4() | Color4B() |  
| ccc4FFromccc3B() | Color4F() |  
| ccc4f() | Color4F() |  
| ccc4FFromccc4B() | Color4F() |  
| ccc4BFromccc4F() | Color4B() |  
| ccc4FEqual() | Color4F::equals() |  
| ccWHITE | Color3B::WHITE |  
| ccYELLOW | Color3B::YELLOW |  
| ccBLUE | Color3B::BLUE |  
| ccGREEN | Color3B::GREEN |  
| ccRED | Color3B::RED |  
| ccMAGENTA | Color3B::MAGENTA |  
| ccBLACK | Color3B::BLACK |  
| ccORANGE | Color3B::ORANGE |  
| ccGRAY | Color3B::GRAY |  
| kBlendFuncDisable | BlendFunc::BLEND_FUNC_DISABLE |


cocos2d-x 常用类名改变

下面的表格中的类名的转换方式主要是直接删除了 CC 前缀。

#v2v31CCActionAction2CCPointPoint3CCAnimationAnimation4CCSpriteSprite5CCLabelLabel6CCMenuMenu7CCObjectRef8CCNodeNode9CCSceneScene10CCLayerLayer11CCSpriteBatchNoeSpriteBatchNode12CCTMXTiledMapTMXTiledMap

cocos2d-x 类名改变

下面表格中的类名的转换就比较大了。

#v2v31CCDictionaryValueMap2CCArrayValueVector3CCStringValue

CCString 用法改变

之前:

CCString* str = CCString::createWithFormat("%s.png","picture");

现在:

std::string str = StringUtils::format("%s.png","picture");

CCDictinoary 用法改变

之前:

CCDictionary* dict = CCDictionary::createWithContentsOfFile("name.plist");CCArray* arr = (CCArray*) data->objectForKey("Levels");

现在:

std::string path = FileUtils::getInstance()->fullPathForFilename("name.plist");ValueMap dict = FileUtils::getInstance()->getValueMapFromFile(path);ValueVector arrLevels = data.at("Levels").asValueVector();

CCArray 用法改变

这里就是 C++ vector 容器的标准用法了。

#v2v31CCArray* sprites;Vector sprites;2sprites->addObject(sprite);sprites.pushBack(sprite);3sprites->removeObject(sprite);sprites.eraseObject(sprite);4sprites->removeObjectAtIndex(i);sprites.erase(i);5sprites->objectAtIndex(i);sprites.at(i);6sprites->count();sprites.size();



触摸用法改变

#v2v31ccTouchBeganonTouchBegan2ccTouchMovedonTouchMoved3ccTouchEndedonTouchEnded

单例类用法改变

#v2v31CCEGLView::sharedOpenGLView();Director::getInstance()->getOpenGLView();2CCTextureCache::sharedTextureCache();Director::getInstance()->getTextureCache();3CCNotificationCenter::sharedNotificationCenter();Director::getInstance()->getEventDispatcher();

CCTime 用法改变

CCTime cocos2d-x v3 中已经被删除了。

#v2v31cc_timevaltimeval2CCTime::gettimeofdayCocos2dgettimeofday3CCTime::timesubCocos2dgetTimeDiffenceMS

范例:

static inline float getTimeDifferenceMS(timeval& start, timeval& end){    return ((((end.tv_sec - start.tv_sec)*1000.0f + end.tv_usec) - start.tv_usec) / 1000.0f);}



OpenGL 的用法变化

#v2v31CCGLProgramGLProgram3kCCUniformPMatrix_sGLProgram::UNIFORM_NAME_P_MATRIX4kCCUniformMVMatrix_sGLProgram::UNIFORM_NAME_MV_MATRIX5kCCUniformMVPMatrix_sGLProgram::UNIFORM_NAME_MVP_MATRIX6kCCUniformTime_sGLProgram::UNIFORM_NAME_TIME7kCCUniformSinTime_sGLProgram::UNIFORM_NAME_SIN_TIME8kCCUniformCosTime_sGLProgram::UNIFORM_NAME_COS_TIME9kCCUniformRandom01_sGLProgram::UNIFORM_NAME_RANDOM0110kCCUniformSampler_sGLProgram::UNIFORM_NAME_SAMPLER011kCCUniformAlphaTestValueGLProgram::UNIFORM_NAME_ALPHA_TEST_VALUE12kCCAttributeNameColorGLProgram::ATTRIBUTE_NAME_COLOR13kCCAttributeNamePositionGLProgram::ATTRIBUTE_NAME_POSITION14kCCAttributeNameTexCoordGLProgram::ATTRIBUTE_NAME_TEX_COORD

MenuItem 的用法变化

在 cocos2d-x v3 中,使用的是 C++11 提供的标准的 std::bind 功能来实现回调。

让我们看看 base/ccMacros.h 中的几个宏:

// 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__)

所以,对于 cocos2d-x v2 中这样的调用:

CMenuItemImage *item1 = CCMenuItemImage::create(s_pPathB1, s_pPathB2, this, menu_selector(ActionsDemo::backCallback));

在 cocos2d-x v3 中应该是这样的:

MenuItemImage *item1 = MenuItemImage::create(s_pPathB1, s_pPathB2, CC_CALLBACK_1(ActionsDemo::backCallback, this));


0 0