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

来源:互联网 发布:C#数组排序 编辑:程序博客网 时间:2024/05/29 08:26

其它信息


 

  • 下载:  http://cdn.cocos2d-x.org/cocos2d-x-3.0alpha1.zip
  • 完整的更新日志:   https://github.com/cocos2d/cocos2d-x/blob/cocos2d-x-3.0alph1/CHANGELOG
  • API 参考:http://www.cocos2d-x.org/reference/native-cpp/V3.0alpha1/index.html


 

要求

运行环境要求:


 

  • 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

0 0
原创粉丝点击