[技术分享] cocos2d-x v3.0.0发布说明

Cocos2d-x v3.0版本引入了许多改进和新特性,包括采用C++11最佳实践替代Objective-C部分、增强标签和渲染器功能、集成物理引擎等。此外还支持std::function、强类型枚举等C++11特性,并对一些常用功能进行了重构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其它信息


 


 

要求

运行环境要求:


 

  • Android2.3或以上
  • ios 5.0 或以上
  • OS X 10.7 或以上
  • Windows 7 或以上
  • Linux Ubuntu 12.04 (或以上)
  • Marmalade 部分不适用
  • lackBerry 部分不适用


 

编译器要求:


 

  • mac和ios 上用 xcode4.6
  • Linux 或者 Android  上用 gcc4.7。Android要求 Androidndk-r8e或以上。
  • Window 上用 Visual Studio 2012


 

V3.0.0的特色


 

  • 用c++(c++11)的最佳实践代替Objective-C的多余部分。
  • 改良 Labels
  • 改良 renderer
  • 新的事件调度
  • 集成物理
  • 新的GUI
  • javascript 远程调试
  • 控制台模式
  • 重构图像——及时释放内存和统一所支持文件格式的API
  • 自动生成lua绑定,LuaJavaBridge,和LuaObjcBridge.
  • 模板库


 

细节特性

c++11特性

在v3.0.0初期测试版上加上了这个特性

c++11 的一部分特性开始在cocos2d-x上使用。


 

  • std::function.加入lambda对象作为回调
  • 强类型枚举,在cocos2d-x中的枚举和常量中大量的使用。
  • std::thread  用于线程
  • override         关键字,检测重载方法。


 

Std::function


 

  • CallFunc 可以用 std::function<void()>来创建
  • CallFuncN 可以用 std::function<void(Node*)>来创建
  • CallFuncND 和 CallFuncO都被移除了,这可以用CallFuncN和CallFunc来模拟,在ActionsTest.cpp中有更多的例子可以查看。
  • MenuItem 支持 std::function<void(Node*)>回调


 

CallFunC 例子。

// in v2.1CCCallFunc *action1 = CCCallFunc::create( this, callfunc_selector( MyClass::callback_0 ) );
// in v3.0
(short version)auto action1 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_0,this));
auto action2 = CallFunc::create( CC_CALLBACK_0(MyClass::callback_1,this, additional_parameters));

// in v3.0
(long version)auto action1 = CallFunc::create( std::bind( &MyClass::callback_0, this));
auto action2 = CallFunc::create( std::bind( &MyClass::callback_1, this, additional_parameters));
// in v3.0
you can also use lambdas or any other "Function"
objectauto 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 例子

// in v2.1
CCMenuItemLabel *item = CCMenuItemLabel::create(label, this, menu_selector(MyClass::callback));
// in v3.0
(short version)auto item = MenuItemLabel::create(label, CC_CALLBACK_1(MyClass::callback, this));

// in v3.0
(long version)auto item = MenuItemLabel::create(label, std::bind(&MyClass::callback, this, std::placeholders::_1));
// in v3.0 you can use lambdas or any other "Function"
objectauto item = MenuItemLabel::create(label,
                  [&](Object *sender) {
                     // do something. Item "sender" clicked
                  });

强类型枚举

在V3.0初期测试版中加入

常量和枚举都以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



 

旧的类型仍然可以使用,但是不赞成使用。

override

这个可以在重载方法时捕捉到可能发生的错误,在子类的重载方法中加上了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;
}

 

转载地址:http://bbs.ityran.com/thread-9146-1-2.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值