level 7
liuxijob
楼主
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;
}
2014年09月01日 01点09分
1
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;
}