3.0时代即将到来,终于摆脱Objective-c阴影,回归C++,并支持强大C++11新特性,小道消息:2014年10与的开发者大会将会推出正式版,不过本人建议开发团队还是以2.2为基础立项,待3.0完善之后再更新版本,但可以先研究下吗。
Cocos2d-x3.0运行环境需求:
- Android 2.3 or newer
- iOS 5.0 or newer
- OS X 10.7 or newer
- Windows (which version?)
- Linux Ubuntu 12.04 (or newer)
- Xcode 4.6 (for iOS or Mac)
- gcc 4.7 for Linux or Android. For Android ndk-r8e or newer is required.
- Visual Studio 2012 (for Windows)(还在用XP系统开发的童鞋,该换了)
- Replace Objective-C patters with C++ (C++11) patterns and best practices
- Improve Labels
- Improve renderer
A subset of C++11 features are being used in cocos2d-x:
std::function
, including lambda objects for callbacks- strongly typed enums, for most of the cocos2d-x enums and constants
std::thread
for threadingoverride
context keyword, for overriden methods
st std::function
CallFunc
can be created with anstd::function<void()>
CallFuncN
can be created with anstd::function<void(Node*)>
CallFuncND
andCallFuncO
were removed since it can be created with simulated withCallFuncN
andCallFunc
. See ActionsTest.cpp for more examplesMenuItem
supportsstd::function<void(Node*)>
as callbacks
v2.1 | v3.0 |
kCCTexture2DPixelFormat_RGBA8888 | Texture2D::PixelFormat::RGBA8888 |
kCCDirectorProjectionCustom | Director::Projection::CUSTOM |
ccGREEN | Color3B::GREEN |
CCPointZero | Point::ZERO |
CCSizeZero | Size::ZERO |
The old values can still be used, but are not deprecated.
Removed Objective-C patterns
移除了所有Object-c模式,删除了CC前辍使用纯C++函数clone() instead of copy()
clone()
returns an autoreleased version of the copy.
copy()
is no longer supported. If you use it, it will compile, but the code will crash.
Example:
Singletons use getInstance() and destroyInstance()
All singletons use getInstance()
and destroyInstance()
(if applicable) to get and destroy the instance.
Examples:
v2.1 | v3.0 |
CCDirector->sharedDirector() | Director->getInstance() |
CCDirector->endDirector() | Director->destroyInstance() |
etc... |
v2.1 methods are still available, but they were tagged as deprecated.
getters
Getters now use the get
prefix.
Examples:
v2.1 | v3.0 |
node->boundingBox() | node->getBoundingBox() |
sprite->nodeToParentTransform() | sprite->getNodeToParentTransform() |
etc... |
And getters were also tagged as const
in their declaration. Example:
v2.1 methods are still available, but they were tagged as deprecated.
POD types
Methods that were receiving POD types as arguments (eg: TexParams
, Point
, Size
, etc.) are being passed as const
reference.
Example:
Misc API Changes
ccTypes.h
Remove cc prefix for structure names in ccTypes.h, move global functions into static member functions, and move global constants into const static member variables.
structure name before changing | structure name after changing |
ccColor3B | Color3B |
ccColor4B | Color4B |
ccColor4F | Color4F |
ccVertex2F | Vertex2F |
ccVertex3F | Vertex3F |
ccTex2F | Tex2F |
ccPointSprite | PointSprite |
ccQuad2 | Quad2 |
ccQuad3 | Quad3 |
ccV2F_C4B_T2F | V2F_C4B_T2F |
ccV2F_C4F_T2F | V2F_C4F_T2F |
ccV3F_C4B_T2F | V3F_C4B_T2F |
ccV2F_C4B_T2F_Triangle | V2F_C4B_T2F_Triangle |
ccV2F_C4B_T2F_Quad | V2F_C4B_T2F_Quad |
ccV3F_C4B_T2F_Quad | V3F_C4B_T2F_Quad |
ccV2F_C4F_T2F_Quad | V2F_C4F_T2F_Quad |
ccBlendFunc | BlendFunc |
ccT2F_Quad | T2F_Quad |
ccAnimationFrameData | AnimationFrameData |
Global functions changed example
deprecated functions and global variables
old name | new name |
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 |