八月份cocos2d-x官网发布了v3.0版本,这次更新的内容特别多,包括2dx的架构以及使用
总得来说,给开发者带来了很大的便利:
运行环境需求:
- 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)
重要更新内容:
- Replace Objective-C patters with C++ (C++11) patterns and best practices
- Improve Labels
- Improve renderer
其中C++ 11 新特性:
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 threading -
override
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 examples -
MenuItem
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:
1// v2.1
2CCMoveBy *action = (CCMoveBy*) move->copy();
3action->autorelease();
4
5// v3.0
6// No need to do autorelease, no need to do casting.
7auto action = move->clone();
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:
1// v2.1
2virtual float getScale();
3
4// v3.0
5virtual float getScale() const;
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:
1// v2.1
2void setTexParameters(ccTexParams* texParams);
3
4// v3.0
5void setTexParameters(const ccTexParams& texParams);
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
1
2// in v2.1
3ccColor3B color3B = ccc3(0, 0, 0);
4ccc3BEqual(color3B, ccc3(1, 1, 1));
5ccColor4B color4B = ccc4(0, 0, 0, 0);
6ccColor4F color4F = ccc4f(0, 0, 0, 0);
7color4F = ccc4FFromccc3B(color3B);
8color4F = ccc4FFromccc4B(color4B);
9ccc4FEqual(color4F, ccc4F(1, 1, 1, 1));
10color4B = ccc4BFromccc4F(color4F);
11
12color3B = ccWHITE;
13
14// in v3.0
15Color3B color3B = Color3B(0, 0, 0);
16color3B.equals(Color3B(1, 1, 1));
17Color4B color4B = Color4B(0, 0, 0, 0);
18Color4F color4F = Color4F(0, 0, 0, 0);
19color4F = Color4F(color3B);
20color4F = Color4F(color4B);
21color4F.equals(Color4F(1, 1, 1, 1));
22color4B = Color4B(color4F);
23
24color3B = Color3B::WHITE;
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 |
——————————————————————————————————–