学习笔记 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 前缀。
cocos2d-x 类名改变
下面表格中的类名的转换就比较大了。
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 容器的标准用法了。
触摸用法改变
单例类用法改变
CCTime 用法改变
CCTime cocos2d-x v3 中已经被删除了。
范例:
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 的用法变化
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
- 学习笔记 cocos2d-x 2.x到3.x的改动与区别
- 关于cocos2d-x 2.x与3.x之间的区别
- cocos2d-x 3.x学习笔记<一>
- 【Cocos2d入门教程十三】 浅析Cocos2d下3.x与2.x屏幕截图的区别
- Quick-cocos2d-x 与Cocos2d-x 区别
- 【cocos2d-x】cocos2d-x学习笔记之一
- [Cocos2d-x]Cocos2d-x 3.2 学习笔记
- [Cocos2d-x]Cocos2d-x 3.2 学习笔记
- Cocos2d-x 学习笔记
- Cocos2d-x学习笔记
- Cocos2d-x学习笔记
- Cocos2d-x学习笔记
- cocos2d-x学习笔记
- cocos2d-x学习笔记
- cocos2d-x 学习笔记
- cocos2d-x 学习笔记
- cocos2d-x学习笔记
- Cocos2d-x 学习笔记
- Java并发包:Java Fork and Join using ForkJoinPool
- 同余和模运算
- 解决ADT不会提示代码的问题
- web前端知识总结-BOM和DOM
- Hdu3037 Saving Beans Lucas定理
- 学习笔记 cocos2d-x 2.x到3.x的改动与区别
- iOS/mac开发的一些知名个人博客
- MagicNumber求平方根倒数
- Lucas定理模板
- unity3d 第四天
- 2016.7.15
- Unity5学习心得-Gameplay
- UESTC 2016 Summer Training #5 Div.2(未完待续)
- CC2540/CC2541/CC254x之OSAL操作系统抽象层