cocos2d-x v3.0发布说明和API修改

cocos2d-x v3.0发布说明和API修改,第1张

概述转自:https://github.com/fusijie/Cocos2dx-Release-Note/blob/master/cocos2d-x_v3.0_release_notes.md 目录 generated with DocToc 概况 需求 环境需求 编译需求 如何运行 TestCpp Mac OSX & iOS Android Windows Linux 如何开始一个新游戏 v3.0

转自:@L_419_0@


目录 generated with 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 变更
ccTypes.h 弃用的函数和全局变量 Lua 绑定的修改
使用 Lua 绑定生成工具 绑定带命名空间的类到 Lua 使用 ScriptHandlerMgr 来管理注册和注销 Lua 函数 其它 API 变更 使用 ccccsccui glsp 作为模块名 函数名修改 添加一些模块 增加更多的 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/androIDcpp-empty-test AndroID 项目导入 Eclipse 中,导入的路径是 tests/cpp-empty-test/proj.androID 编译 cpp-empty-test AndroID 项目,然后运行即可 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 方法,增加了 overrIDefinal 上下文关键字 std::function CallFunc 可以由 std::function<voID()> 来创建 CallFuncN 可以由 std::function<voID(Node*)> 来创建 CallFuncNDCallFuncO 已经被移除了因为它们可以类似地由 CallFuncNCallFunc 来创建. 可以查看示例中的 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,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,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,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.1CCMoveBy *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.1virtual float getScale();// v3.0virtual float getScale() const;

v2.1 方法仍然有效,但已经被标记为 deprecated。

POD 类型

接收 POD 类型作为参数的方法(比如:TexParams,Point,Size,等等)已经修改为传递成 const 型引用。

示例:

// v2.1voID setTexParameters(ccTexParams* texParams);// v3.0voID 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 (SpriteParticleSystem 对象使用) 将会自动进行批处理。 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的节点会比一个 globalZOrder10 的节点优先绘制。

globalZOrder0 (默认值)的节点将会根据 Scene Graph 顺序绘制。

如果 globalZOrder 不变的话,Cocos2d-x v3.0 和 Cocos2d-x v2.2 行为一致。

globalZOrder()localZOrder():

globalZOrder 是用于 渲染器 中用来给“绘制命令”排序的 localZOrder 是用于父节点的子节点数组中给 节点 对象排序的

例外:

待办事项

Sprite 和 SpriteBatchNode

v2.2
2.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 作为子节点,包括 ParticleSystemSprite 对象可以有不同的混合函数和不同的着色器。

但是如果你这么做,渲染器 可能无法对它所有的子节点进行批处理(性能较低)。但是游戏仍然可以正常运行,不会触发任何断言。

总结:

保持将所有的精灵放在一张大的 Spritesheet 中。 使用相同的混合函数(使用默认) 使用相同的着色器(使用默认) 不要将精灵添加到 SpriteBatchNode

只有当你需要一些额外的性能上提升(虽然很小),SpriteBatchNode 才会是你最后的选择(你需要对它的限制条件很熟悉)。

优化 LabelTTF / LabelBMFont / LabelAtlas

这些特性从 v3.0-Alpha0 开始被添加

LabelTTF,LabelBMFontLabelAtlas 将会被新的 Label 代替. 新的 Label 带来的好处有:

统一了创建 LabelTTF,LabelBMFontLabelAtlas 的 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.1cccolor3B color3B = ccc3(0,0);ccc3BEqual(color3B,ccc3(1,1,1));cccolor4B color4B = ccc4(0,0);cccolor4F color4F = ccc4f(0,0);color4F = ccc4FFromccc3B(color3B);color4F = ccc4FFromccc4B(color4B);ccc4FEqual(color4F,ccc4F(1,1));color4B = ccc4BFromccc4F(color4F);color3B = ccwHITE;// in v3.0color3B color3B = color3B(0,0);color3B.equals(color3B(1,1));color4B color4B = color4B(0,0);color4F color4F = color4F(0,0);color4F = color4F(color3B);color4F = color4F(color4B);color4F.equals(color4F(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,"CCNode",&tolua_err         | tolua_isusertable(tolua_S,"cc.Node",&tolua_err  || tolua_isusertype(tolua_S,&tolua_err)         | tolua_isusertype(tolua_S,&tolua_err)  || toluafix_pushusertype_ccobject(tolua_S,nID,pLuaID,(voID*)tolua_ret,"CCNode")       | toluafix_pushusertype_ccobject(tolua_S,"cc.Node")  || tolua_pushusertype(tolua_S,"CCfileUtils")        | tolua_pushusertype(tolua_S,"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 变更 使用 ccccsccui glsp 作为模块名

现在类已经被绑定到不同的模块而不是使用全局模块。这可以避免和其他代码产生冲突。

cocos2dcocos2d::extensionCocosDenshioncocosbuilder 的类被绑到 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

XMLhttpRequestphysicscc 模块中,spinesp 模块中, OpenGLgl 模块中,相关的测试例在:

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 代码

LuaObjcBrIDgeLuaJavaBrIDge 被绑定到 Lua 以支持 Lua 脚本代码调用 Object-C 代码和 java 代码。

添加一些 Lua 文件来储存不同的模块常量 Cocos2DConstants.lua 储存 cc 模块的常量 StudioConstants.lua 储存 ccs 模块的常量 GuiConstants.lua 储存 ccui 模块的常量 OpenglConstants.lua 储存 gl 模块的常量 总结

以上是内存溢出为你收集整理的cocos2d-x v3.0发布说明和API修改全部内容,希望文章能够帮你解决cocos2d-x v3.0发布说明和API修改所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1082000.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存