cocos2d pod_cocos2d-x游戏引擎核心之十二——3.x新特性

v3.0 亮点

使用 C++(C++11) 的特性取代了 Objective-C 的特性

优化了 Labels

优化了渲染器(比 v2.2 更快)

新的事件分发机制

物理引擎集成

新的 UI 对象

支持远程控制台

重构 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 来创建

CallFuncN 可以由 std::function 来创建

CallFuncND 和 CallFuncO 已经被移除了因为它们可以类似地由 CallFuncN 和 CallFunc 来创建. 可以查看示例中的 ActionsTest.cpp 文件

MenuItem 支持 std::function 作为回调

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 : publicNode {bool isFlipY(void) const;void setFlipY(boolbFlipY);//Overrides

virtual void setTexture(Texture2D *texture) override;virtual Texture2D* getTexture() const override;

inlinevoid setBlendFunc(const BlendFunc &blendFunc) override;

inlineconst 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 function

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值