cocos2dx 3.x发布说明
2017-09-11 10:57
501 查看
官网发布网站:
https://fusijie.github.io/Cocos2dx-Release-Note/cocos2d-x_v3.0_release_notes.html
摘录3.0的发布说明,3.0 是一个大的改动, 最主要的弃用了CC语法!详细如下:
DocToc
概况
需求
环境需求
编译需求
如何运行 TestCpp
Mac OSX & iOS
Android
Windows
Linux
如何开始一个新游戏
v3.0 亮点
细节
C++11 特性
std::function
强类型枚举
覆盖
去OC化
移除C++类的“cc”前缀以及free functions
使用 clone 替代 copy
单例类采用了 getInstance 和 destroyInstance
使用了 Ref 代替了 Object
getters
POD 类型
新的渲染器
渲染器特性
自动批处理
自动剔除
全局 Z 值
Sprite 和 SpriteBatchNode
优化 LabelTTF / LabelBMFont / LabelAtlas
新的事件分发机制
物理引擎集成
其他 API 变更
弃用的函数和全局变量
Lua 绑定的修改
使用 Lua 绑定生成工具
绑定带命名空间的类到 Lua
使用 ScriptHandlerMgr
来管理注册和注销 Lua 函数
其它 API 变更
使用
函数名修改
添加一些模块
增加更多的 Lua 绑定
将一些
Lua 绑定的类或结构体替换成表
支持 Lua
脚本代码调用 Object-C 代码和 java 代码
添加一些
Lua 文件来储存不同的模块常量
iOS 5.0 及以上
OS X 10.7 及以上
Windows 7 及以上
Windows Phone 8 及以上(初级阶段)
Linux Ubuntu 12.04 及以上
Browsers via Emscripten 暂不支持
gcc 4.7 for Linux or Android. Android 要求 ndk-r9 及以上.
Visual Studio 2012 (for Windows)
在 Xcode 的 scheme toolbar 选择
点击
使用命令行:
然后点击安卓设备上的程序运行测试例,
使用 Eclipse
然后
把 cocos2d-x Android 项目导入 Eclipse 中,导入的路径是
把
编译
选择
点击运行按钮
然后
运行
说明 和
文档 。
优化了 Labels
优化了渲染器(比 v2.2 更快)
新的事件分发机制
物理引擎集成
新的 UI 对象
JavaScript 远程调试器
支持远程控制台
使用
cocos console创建和运行项目
重构 Image - 及时释放内存,统一了支持文件格式的 API
自动生成 Lua 绑定,添加了 LuaJavaBridge 和 LuaObjcBridge
模板容器
使用
用法
使用
用法
使用
用法
C++11 的一部分特性已经被使用到 cocos2d-x 中了:
对于大多数的 cocos2d-x 枚举和常量采用了强类型枚举
在线程中使用了
对于 Override 和 final 方法,增加了
以
新的格式是:
示例:
旧的值仍然是可以使用的,但是已经被标记为 deprecated.
示例:
因为 cocos2d-x 已经使用了
v2.1 类名仍然有效,但是已经被标记为 deprecated。
free functions 的变更
对于 drawing primitives:
已经被添加到
移除
对于 gl proxy functions:
已经被添加到
移除
示例:
v2.1 free functions 仍然有效,但已经被标记为 deprecated。
示例:
Examples:
v2.1 方法仍然有效,但已经被标记为 deprecated。
示例:
当然 getters 在声明中也被标识为
v2.1 方法仍然有效,但已经被标记为 deprecated。
示例:
Cocos2d-x v2.2 中渲染方式是没问题的,但是它难以进行优化,也难以添加新的功能和移植到新的平台。所以,Cocos2d-x v3.0 有了一个更威武,更优雅,更易扩展,更灵活的新渲染器,但是它依旧很容易使用也很好理解。Cocos2d-x 的老用户们将会发现新的API是如此的熟悉,根本不需要去考虑底层做了什么改变和更新,用起来仍然是这么的舒服。
新渲染器特性:
它已经从 Scene Graph 中分离出来,
全局 Z 轴顺序 (局部 Z 轴顺序仍然有效)
更多的细节信息,可以阅读如下文档:Renderer Specification document
它仅工作在
如果这些条件都满足的话,
如果你不熟悉 OpenGL 的使用,批处理对于您游戏的能否拥有一个流畅的运行速度是很重要的,越少的批处理(绘制调用)越有利于您游戏的表现力。
当
如果
例外:
待办事项
当
这将导致当
所有的
虽然 v3.0 仍然支持
但是,为了能让 v3.0 有更好的表现,你必须要确保你的
贡献相同的纹理ID(把它们放在一个spritesheet中,就像使用
确保它们使用相同的着色器和混合函数(就像使用
如果这么做,
v2.2 和 v3.0 最大的区别在于:
但是如果你这么做,
总结:
保持将所有的精灵放在一张大的 spritesheet 中。
使用相同的混合函数(使用默认)
使用相同的着色器(使用默认)
不要将精灵添加到
只有当你需要一些额外的性能上提升(虽然很小),
统一了创建
使用
缓存纹理以提高性能
触摸事件,键盘事件,加速器事件和自定义事件等所有事件都由
事件的分发基于渲染顺序
所有的事件都由
可以使用
可以注册一个 lambda 表达式作为回调函数
更多
这个文档。
在 v3.0 中,我们把基于
Chipmunk2D 的物理引擎集成到 Cocos2d-x 中,通过这些特性,你可以很容易创建基于物理效果的游戏,而不必去理解物理引擎。
更的关于物理引擎集成的细节可以参考
这个文档。
在 ccType.h 中删除结构命名中的 cc 前缀,将全局函数移至静态成员函数,将全局常量移至静态成员常量。
全局函数变更示例
然后在 .cpp 文件中实现它们,在 Lua 脚本中使用它们:
在 v3.0 中,我们只需要在
使用
现在类已经被绑定到不同的模块而不是使用全局模块。这可以避免和其他代码产生冲突。
全局变量被绑到相应的模块
所有关于
示例:
示例:
physics
spine
XMLHttpRequest
OpenGL
physics ---> TestLua/PhysicsTest
spine ---> TestLua/SpineTest
XMLHttpRequest ---> TestLua/XMLHttpRequestTest
openGL ---> TestLua/OpenGLTest
New Label ---> TestLua/LabelTestNew
New EventDispatcher --->TestLua/NewEventDispatcherTest
AssetsManager ---> TestLua/AssetsManagerTest
示例:
StudioConstants.lua 储存
GuiConstants.lua 储存
OpenglConstants.lua 储存
https://fusijie.github.io/Cocos2dx-Release-Note/cocos2d-x_v3.0_release_notes.html
摘录3.0的发布说明,3.0 是一个大的改动, 最主要的弃用了CC语法!详细如下:
cocos2d-x v3.0 发布说明
目录 generated withDocToc
概况
需求
环境需求
编译需求
如何运行 TestCpp
Mac OSX & iOS
Android
Windows
Linux
如何开始一个新游戏
v3.0 亮点
细节
C++11 特性
std::function
强类型枚举
覆盖
去OC化
移除C++类的“cc”前缀以及free functions
使用 clone 替代 copy
单例类采用了 getInstance 和 destroyInstance
使用了 Ref 代替了 Object
getters
POD 类型
新的渲染器
渲染器特性
自动批处理
自动剔除
全局 Z 值
Sprite 和 SpriteBatchNode
优化 LabelTTF / LabelBMFont / LabelAtlas
新的事件分发机制
物理引擎集成
其他 API 变更
ccTypes.h
弃用的函数和全局变量
Lua 绑定的修改
使用 Lua 绑定生成工具
绑定带命名空间的类到 Lua
使用 ScriptHandlerMgr
来管理注册和注销 Lua 函数
其它 API 变更
使用
cc、
ccs、
ccui
gl和
sp作为模块名
函数名修改
添加一些模块
增加更多的 Lua 绑定
将一些
Lua 绑定的类或结构体替换成表
支持 Lua
脚本代码调用 Object-C 代码和 java 代码
添加一些
Lua 文件来储存不同的模块常量
概况
下载: http://www.cocos2d-x.org/filedown/cocos2d-x-3.0-cn 完整更新日记: https://github.com/cocos2d/cocos2d-x/blob/cocos2d-x-3.0beta/CHANGELOG API参考手册: http://www.cocos2d-x.org/reference/native-cpp/V3.0beta/index.html需求
环境需求
Android 2.3 及以上iOS 5.0 及以上
OS X 10.7 及以上
Windows 7 及以上
Windows Phone 8 及以上(初级阶段)
Linux Ubuntu 12.04 及以上
Browsers via Emscripten 暂不支持
编译需求
Xcode 4.6 (for iOS or Mac)gcc 4.7 for Linux or Android. Android 要求 ndk-r9 及以上.
Visual Studio 2012 (for Windows)
如何运行 TestCpp
Mac OSX & iOS
进入cocos2d-x/build文件夹, 打开
cocos2d_test.xcodeproj
在 Xcode 的 scheme toolbar 选择
iOS或者
OS X平台
点击
run按钮
Android
你可以运行一下示例...使用命令行:
$ cd cocos2d-x $ ./setup.py $ cd build $ ./android-build.py cpp-empty-test -p 10 $ adb install cocos2d-x/tests/cpp-empty-test/proj.android/bin/CppEmptyTest-debug.apk
然后点击安卓设备上的程序运行测试例,
-p指定了 Android API 等级,cocos2d-x 支持 level10 以上。
使用 Eclipse
$ cd cocos2d-x $ ./setup.py $ cd build $ ./android-build.py cpp-empty-test -p 10
然后
把 cocos2d-x Android 项目导入 Eclipse 中,导入的路径是
cocos/2d/platform/android
把
cpp-empty-testAndroid 项目导入 Eclipse 中,导入的路径是
tests/cpp-empty-test/proj.android
编译
cpp-empty-testAndroid 项目,然后运行即可
Windows
进入cocos2d-x/build目录, 然后打开
cocos2d-win32.vs2012.sln文件
选择
cpp-empty-test作为启动项
点击运行按钮
Linux
$ cd cocos2d-x/build $ ./install-deps-linux.sh $ cd ../..
然后
$ mkdir build $ cd build $ cmake ../cocos2d-x $ make -j4
运行
$ cd bin/cpp-empty-test $ ./cpp-empty-test
如何开始一个新游戏
请参考说明 和
文档 。
v3.0 亮点
使用 C++(C++11) 的特性取代了 Objective-C 的特性优化了 Labels
优化了渲染器(比 v2.2 更快)
新的事件分发机制
物理引擎集成
新的 UI 对象
JavaScript 远程调试器
支持远程控制台
使用
cocos console创建和运行项目
重构 Image - 及时释放内存,统一了支持文件格式的 API
自动生成 Lua 绑定,添加了 LuaJavaBridge 和 LuaObjcBridge
模板容器
使用
cocos2d::Map<>替代了
CCDictionary,
用法
使用
cocos2d::Vector<>替代了
CCArray,
用法
使用
cocos2d::Value替代了
CCBool,
CCFLoat,
CCDouble,
用法
细节
C++11 特性
从 v3.0-pre-alpha0 开始,这些特性被添加C++11 的一部分特性已经被使用到 cocos2d-x 中了:
std::function, 包含了回调中使用的 lambda 对象
对于大多数的 cocos2d-x 枚举和常量采用了强类型枚举
在线程中使用了
std::thread
对于 Override 和 final 方法,增加了
override和
final上下文关键字
std::function
CallFunc可以由
std::function<void()>来创建
CallFuncN可以由
std::function<void(Node*)>来创建
CallFuncND和
CallFuncO已经被移除了因为它们可以类似地由
CallFuncN和
CallFunc来创建. 可以查看示例中的 ActionsTest.cpp 文件
MenuItem支持
std::function<void(Node*)>作为回调
CallFunc示例:
// v2.1 版本 CCCallFunc *action1 = CCCallFunc::create( this, callfunc_selector( MyClass::callback_0 ) ); // v3.0 版本 (短版本) auto action1 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_0,this)); auto action2 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_1,this, additional_parameters)); // v3.0 版本 (长版本) auto action1 = CallFunc::create( std::bind( &MyClass::callback_0, this)); auto action2 = CallFunc::create( std::bind( &MyClass::callback_1, this, additional_parameters)); // v3.0 中你也可以使用lambda表达式或者其他函数对象 auto action1 = CallFunc::create( [&](){ auto s = Director::sharedDirector()->getWinSize(); auto label = LabelTTF::create("called:lambda callback", "Marker Felt", 16); label->setPosition(ccp( s.width/4*1,s.height/2-40)); this->addChild(label); } );
MenuItem示例:
// v2.1 版本 CCMenuItemLabel *item = CCMenuItemLabel::create(label, this, menu_selector(MyClass::callback)); // v3.0 版本 (短版本) auto item = MenuItemLabel::create(label, CC_CALLBACK_1(MyClass::callback, this)); // v3.0 版本 (长版本) auto item = MenuItemLabel::create(label, std::bind(&MyClass::callback, this, std::placeholders::_1)); // v3.0 中你也可以使用lambda表达式或者其他函数对象 auto item = MenuItemLabel::create(label, [&](Object *sender) { // do something. Item "sender" clicked });
强类型枚举
从 v3.0-pre-alpha0 开始,这些特性被添加以
k开头的常量和枚举量,通常被定义为
int或者简单的
enum类型,现在已经被强类型枚举(
enum class)所替代,这样有利于避免冲突和类型错误。
新的格式是:
| v2.1 | v3.0 | | kTypeValue | Type::VALUE |
示例:
| v2.1 | v3.0 | | kCCTexture2DPixelFormat_RGBA8888 | Texture2D::PixelFormat::RGBA8888 | | kCCDirectorProjectionCustom | Director::Projection::CUSTOM | | ccGREEN | Color3B::GREEN | | CCPointZero | Point::ZERO | | CCSizeZero | Size::ZERO |
旧的值仍然是可以使用的,但是已经被标记为 deprecated.
覆盖
为了捕获覆盖方法中可能出现的错误,子类的覆盖方法添加了override的关键字。
示例:
class Sprite : public Node { bool isFlipY(void) const; void setFlipY(bool bFlipY); // Overrides virtual void setTexture(Texture2D *texture) override; virtual Texture2D* getTexture() const override; inline void setBlendFunc(const BlendFunc &blendFunc) override; inline const BlendFunc& getBlendFunc() const override; }
去OC化
从 v3.0-pre-alpha0 开始,这些特性被添加移除C++类的“cc”前缀以及free functions
类的变更因为 cocos2d-x 已经使用了
cocos2d的命名空间,因此也就不需要在所有的类中添加
CC的前缀。示例:
| v2.1 | v3.0 | | CCSprite | Sprite | | CCNode | Node | | CCDirector | Director | | etc... |
v2.1 类名仍然有效,但是已经被标记为 deprecated。
free functions 的变更
对于 drawing primitives:
已经被添加到
DrawPrimitives命名空间
移除
cc前缀
对于 gl proxy functions:
已经被添加到
GL命名空间
移除
ccGL前缀
示例:
| v2.1 | v3.0 | | ccDrawPoint() | DrawPrimitives::drawPoint() | | ccDrawCircle() | DrawPrimitives::drawCircle() | | ccGLBlendFunc() | GL::blendFunc() | | ccGLBindTexture2D() | GL::bindTexture2D() | | etc... |
v2.1 free functions 仍然有效,但已经被标记为 deprecated。
使用 clone 替代 copy
clone()返回了一份 autoreleased 版本的拷贝。
copy()不再被支持,如果你使用它,仍然是可以编译的,但是代码会崩掉。
示例:
// v2.1 CCMoveBy *action = (CCMoveBy*) move->copy(); action->autorelease(); // v3.0 // 不需要使用autorelease,也不需要做转换 auto action = move->clone();
单例类采用了 getInstance 和 destroyInstance
所有的单例类使用getInstance()和
destroyInstance()(如果可用) 来获取和摧毁实例。
Examples:
| v2.1 | v3.0 | | CCDirector->sharedDirector() | Director->getInstance() | | CCDirector->endDirector() | Director->destroyInstance() | | etc... |
v2.1 方法仍然有效,但已经被标记为 deprecated。
使用了 Ref 代替了 Object
因为Object容易让人混淆,所以重命名为
Ref,同时移除了和引用计数无关的函数,之前所有继承于
Object的类现在都改为继承于
Ref。
getters
Getters 现在使用了get前缀。
示例:
| v2.1 | v3.0* | | node->boundingBox() | node->getBoundingBox() | | sprite->nodeToParentTransform() | sprite->getNodeToParentTransform() | | etc... |
当然 getters 在声明中也被标识为
const。 示例:
// v2.1 virtual float getScale(); // v3.0 virtual float getScale() const;
v2.1 方法仍然有效,但已经被标记为 deprecated。
POD 类型
接收 POD 类型作为参数的方法(比如:TexParams,
Point,
Size,等等)已经修改为传递成
const型引用。
示例:
// v2.1 void setTexParameters(ccTexParams* texParams); // v3.0 void setTexParameters(const ccTexParams& texParams);
新的渲染器
v3.0-beta 中,这些特性被添加, v3.0-beta2 中进行了优化Cocos2d-x v2.2 中渲染方式是没问题的,但是它难以进行优化,也难以添加新的功能和移植到新的平台。所以,Cocos2d-x v3.0 有了一个更威武,更优雅,更易扩展,更灵活的新渲染器,但是它依旧很容易使用也很好理解。Cocos2d-x 的老用户们将会发现新的API是如此的熟悉,根本不需要去考虑底层做了什么改变和更新,用起来仍然是这么的舒服。
新渲染器特性:
它已经从 Scene Graph 中分离出来,
draw()方法替代了 “drawing” 发送了一个
渲染命令给
渲染器,而
渲染器负责绘制排队的
渲染命令。
QuadCommands(
Sprite和
ParticleSystem对象使用) 将会自动进行批处理。
CustomCommand对象允许用户自定义 OpenGL 代码,使用的 API 类似 v2.2。
GroupCommand对象允许渲染器中拥有不同 OpenGL 值的“堆栈”。
Sprite的自动剔除功能(虽然从技术上讲,自动剔除功能是表现在
Sprite代码上而不是
Renderer代码上)
全局 Z 轴顺序 (局部 Z 轴顺序仍然有效)
更多的细节信息,可以阅读如下文档:Renderer Specification document
渲染器特性
自动批处理
自动批处理功能意味着渲染器将会把
多次绘制调用打包为一次
大的绘制调用(AKA batch)。组合
绘制调用当然需要满足一定的条件:
它仅工作在
QuadCommand命令下(由 Sprite 和 ParticleSystem 对象使用)
QuadCommadnds必须共享相同的材质 ID :相同的纹理ID,相同的 GLProgram 和相同的混合功能
QuadCommands必须是连续的
如果这些条件都满足的话,
渲染器将会使用所有这些
QuadCommand对象创建一个批处理(一次绘制调用)。
如果你不熟悉 OpenGL 的使用,批处理对于您游戏的能否拥有一个流畅的运行速度是很重要的,越少的批处理(绘制调用)越有利于您游戏的表现力。
自动剔除
目前,自动剔除功能只在Sprite对象中实现。
当
Sprite::draw()被调用的时候,它将会检查
Sprite是否超出屏幕,如果是的话,它将不会发送
QuadCommand命令给
渲染器,因此可以获得一些性能上的提升。
全局 Z 值
Node增加了新的函数
setGlobalZOrder()/
getGlobalZOrder(),之前的旧函数
setZOrder()/
getZOrder()也被重命名为
setLocalZOrder()/
getLocalZOrder()。
globalZOrder是一个
float(不是
int)的参数。这个值在
渲染器中用来给
RenderCommand排序。较低的值拥有较高的优先级。这意味着一个
globalZorder为
-10的节点会比一个
globalZOrder为
10的节点优先绘制。
globalZOrder为
0(默认值)的节点将会根据 Scene Graph 顺序绘制。
如果
globalZOrder不变的话,Cocos2d-x v3.0 和 Cocos2d-x v2.2 行为一致。
globalZOrder()和
localZOrder():
globalZOrder是用于
渲染器中用来给“绘制命令”排序的
localZOrder是用于父节点的子节点数组中给
节点对象排序的
例外:
待办事项
Sprite 和 SpriteBatchNode
v2.22.2版本中推荐的优化游戏方式是将SpriteBatchNode对象设置为
Sprite对象的父节点。虽然使用
SpriteBatchNode对象仍然是一个非常好的优化游戏的方式,但是它仍然有一定的限制:
Sprite对象的孩子只能是
Sprite(否则,Cocos2d-x 会触发断言)
当
Sprite的父节点是
SpriteBactchNode时,不能添加
ParticleSystem作为
Sprite的子节点。
这将导致当
Sprite的父节点是
SpriteBatchNode时,不能使用
ParallaxNode
所有的
Sprite对象必须共享相同的纹理ID (否则,Cocos2d-x 会触发断言)
Sprite对象使用
SpriteBatchNode的混合函数和着色器。
虽然 v3.0 仍然支持
SpriteBatchNode(与之前的版本拥有相同的特效和限制),但是我们不鼓励使用它。相反,我们推荐直接使用
Sprite,不需要再它作为子节点添加到
SpriteBatchNode中。
但是,为了能让 v3.0 有更好的表现,你必须要确保你的
Sprite对象满足以下条件:
贡献相同的纹理ID(把它们放在一个spritesheet中,就像使用
SpriteBatchNode一样)
确保它们使用相同的着色器和混合函数(就像使用
SpriteBatchNode一样)
如果这么做,
Sprites将会像使用
SpriteBatchNode一样的快...(在旧设备上大概慢了10%,在新设备上基本上察觉不出)
v2.2 和 v3.0 最大的区别在于:
Sprite对象可以有不同的纹理ID。
Sprite对象可以有不同种类的
Node作为子节点,包括
ParticleSystem。
Sprite对象可以有不同的混合函数和不同的着色器。
但是如果你这么做,
渲染器可能无法对它所有的子节点进行批处理(性能较低)。但是游戏仍然可以正常运行,不会触发任何断言。
总结:
保持将所有的精灵放在一张大的 spritesheet 中。
使用相同的混合函数(使用默认)
使用相同的着色器(使用默认)
不要将精灵添加到
SpriteBatchNode
只有当你需要一些额外的性能上提升(虽然很小),
SpriteBatchNode才会是你最后的选择(你需要对它的限制条件很熟悉)。
优化 LabelTTF / LabelBMFont / LabelAtlas
这些特性从 v3.0-alpha0 开始被添加LabelTTF,
LabelBMFont和
LabelAtlas将会被新的
Label代替. 新的
Label带来的好处有:
统一了创建
LabelTTF,
LabelBMFont和
LabelAtlas的 API
使用
freetype生成 labels 的纹理,这样就能保证在不同的平台下 labels 有相同的效果。
缓存纹理以提高性能
新的事件分发机制
这些特性从 v3.0-alpha0 开始被添加触摸事件,键盘事件,加速器事件和自定义事件等所有事件都由
EventDispatcher分发。
TouchDispatcher,
KeypadDispatcher,
KeyboardDispatcher,
AccelerometerDispatcher已经被移除。
EventDispatcher的特性主要有:
事件的分发基于渲染顺序
所有的事件都由
EventDispatcher分发
可以使用
EventDispatcher来分发自定义事件
可以注册一个 lambda 表达式作为回调函数
更多
EventDispatcher细节可以参考
这个文档。
物理引擎集成
这些特性从 v3.0-pre-alpha0 开始被添加在 v3.0 中,我们把基于
Chipmunk2D 的物理引擎集成到 Cocos2d-x 中,通过这些特性,你可以很容易创建基于物理效果的游戏,而不必去理解物理引擎。
更的关于物理引擎集成的细节可以参考
这个文档。
其他 API 变更
ccTypes.h
在 ccType.h 中删除结构命名中的 cc 前缀,将全局函数移至静态成员函数,将全局常量移至静态成员常量。| v2.1 struct names | v3.0 struct names | | 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 |
全局函数变更示例
// in v2.1 ccColor3B color3B = ccc3(0, 0, 0); ccc3BEqual(color3B, ccc3(1, 1, 1)); ccColor4B color4B = ccc4(0, 0, 0, 0); ccColor4F color4F = ccc4f(0, 0, 0, 0); color4F = ccc4FFromccc3B(color3B); color4F = ccc4FFromccc4B(color4B); ccc4FEqual(color4F, ccc4F(1, 1, 1, 1)); color4B = ccc4BFromccc4F(color4F); color3B = ccWHITE; // in v3.0 Color3B color3B = Color3B(0, 0, 0); color3B.equals(Color3B(1, 1, 1)); Color4B color4B = Color4B(0, 0, 0, 0); Color4F color4F = Color4F(0, 0, 0, 0); color4F = Color4F(color3B); color4F = Color4F(color4B); color4F.equals(Color4F(1, 1, 1, 1)); color4B = Color4B(color4F); color3B = Color3B::WHITE;
弃用的函数和全局变量
| 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 | | GLView::sharedOpenGLView | GLView::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 |
Lua 绑定的修改
使用 Lua 绑定生成工具
只需要为模块写个 ini 文件,而不必写一堆的 .pkg 文件。绑定带命名空间的类到 Lua
之前不能绑定具有相同类名、不同命名空间的类到 Lua。为了解决这个问题,现在类的元表名已被修改了。比如,CCNode将会被改为
cc.Node。这样的改变将会影响如下一些API的使用。
| v2.x | v3.0 | | tolua_usertype(tolua_S,"CCNode") | tolua_usertype(tolua_S,"cc.Node") | | tolua_isusertable(tolua_S,1,"CCNode",0,&tolua_err | tolua_isusertable(tolua_S,1,"cc.Node",0,&tolua_err | | tolua_isusertype(tolua_S,1,"CCNode",0,&tolua_err) | tolua_isusertype(tolua_S,1,"cc.Node",0,&tolua_err) | | toluafix_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"CCNode") | toluafix_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret,"cc.Node") | | tolua_pushusertype(tolua_S,(void*)tolua_ret,"CCFileUtils") | tolua_pushusertype(tolua_S,(void*)tolua_ret,"cc.FileUtils") | | tolua.cast(pChildren[i + 1], "CCNode") | tolua.cast(pChildren[i + 1], "cc.Node") |
使用 ScriptHandlerMgr 来管理注册和注销 Lua 函数
当我们想要为类的 Lua 函数添加注册和注销功能,我们需要改变声明和定义文件,然后绑定到 Lua。在 v3.0 中,我们使用了ScriptHandlerMgr。举个例子,我们可以看下
MenuItem这个类:在 v2.x 中,我们需要在 MenuItem 的头文件中添加一个声明:
virtual void registerScriptTapHandler(int nHandler); virtual void unregisterScriptTapHandler(void);
然后在 .cpp 文件中实现它们,在 Lua 脚本中使用它们:
menuItem:registerScriptTapHandler(luafunction)
在 v3.0 中,我们只需要在
ScriptHandlerMgr中添加一个
HandlerType的枚举类型,然后在 luascript 中实现即可:
ScriptHandlerMgr:getInstance():registerScriptHandler(menuItem, luafunction,cc.HANDLERTYPE_MENU_CLICKED)
其它 API 变更
使用 cc
、ccs
、ccui
gl
和 sp
作为模块名
现在类已经被绑定到不同的模块而不是使用全局模块。这可以避免和其他代码产生冲突。cocos2d、
cocos2d::extension、
CocosDenshion和
cocosbuilder的类被绑到
cc模块
cocos2d:ui的类被绑到
ccui模块
spine的类被绑到
sp模块
cocostudio的类被绑到
ccs模块
全局变量被绑到相应的模块
所有关于
openGl的函数和常量被绑到
gl模块
示例:
| v2.1 | v3.0 | | CCDirector | cc.Director | | CCArmature | ccs.Armature | | kCCTextAlignmentLeft | cc.kCCTextAlignmentLeft |
函数名修改
一些全局函数被重命名:示例:
| v2.1 | v3.0 | | CCPoint/ccp | cc.p | | CCRect | cc.rect | | CCColor3B | cc.c3b | | CCColor4B | cc.c4b | | CCColor4F | cc.c4f |
添加一些模块
在 v3.0 中,更多模块被绑定到 Lua,具体如下:physics
spine
XMLHttpRequest
OpenGL
XMLHttpRequest和
physics在
cc模块中,
spine在
sp模块中,
OpenGL在
gl模块中,相关的测试例在:
physics ---> TestLua/PhysicsTest
spine ---> TestLua/SpineTest
XMLHttpRequest ---> TestLua/XMLHttpRequestTest
openGL ---> TestLua/OpenGLTest
增加更多的 Lua 绑定
比如:新的 Label、新的事件分发机制和 AssetsManager 等等。相关的测试例在:New Label ---> TestLua/LabelTestNew
New EventDispatcher --->TestLua/NewEventDispatcherTest
AssetsManager ---> TestLua/AssetsManagerTest
将一些 Lua 绑定的类或结构体替换成表
在 v3.0中,所有 Lua 绑定的结构体类型被替换成表示例:
| v2.1 | v3.0 | | CCPoint | lua table | | CCRect | lua table | | CCColor3B | lua table | | CCColor4B | lua table | | CCColor4F | lua table | | CCAffineTransform | lua table | | CCArray | lua table | | CCDictionary | lua table | | CCPointArray | lua table |
支持 Lua 脚本代码调用 Object-C 代码和 java 代码
LuaObjcBridge和
LuaJavaBridge被绑定到 Lua 以支持 Lua 脚本代码调用 Object-C 代码和 java 代码。
添加一些 Lua 文件来储存不同的模块常量
Cocos2DConstants.lua 储存cc模块的常量
StudioConstants.lua 储存
ccs模块的常量
GuiConstants.lua 储存
ccui模块的常量
OpenglConstants.lua 储存
gl模块的常量
相关文章推荐
- cocos2dx[3.x]——V3.x各个版本发布说明
- cocos2dx[3.x]——V3.x各个版本发布说明
- CocoStuido 2.x中发布的资源怎样在cocos2dx 3.x中使用
- [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--地图(一)
- cocos2dx3.X项目重写(四)添加地板,障碍物和碰撞检测
- APICloud SDK_v1.1.17发布说明(2015年4月11日)
- cocos2dx 3.x版本 Sprite 灰度和彩色切换,无偏移
- cocos2dx3.X项目重写(三)按钮和跳跃
- Spring 3.X 中各JAR包的用途说明
- 荷露叮咚PowerDesigner15系列视频课程发布动态及相关说明
- cocos2dx3.X项目重写(五)添加分数,开始和结束场景。
- cocos2dx3.x schedule设置interval的坑!!!
- cocos2dx 3.x Android环境下添加广告
- Alpha版本发布说明
- cocos2dx 3.x 快速创建项目
- Module-Zero之发布说明
- cocos2dx3.x 使用libluacocos2d库 问题
- cocos2dx 3.x 弃用列表
- “我爱背单词”beta版发布与使用说明