cocos2d-x version2.2.3からversion3.2rc0への移行メモ

cocos2d-x を version2.2.3からversion3.2rc0に移行しました
C++C++11としての記述が可能となり、cocos2d-xの記述についても変更した点についてまとめました
これが正しい方法である保証はありませんので、参考程度の見ていただければと思います

型推論

初期化を含んだ宣言では、型名を使わずautoで宣言できるようになった

auto sprite = Sprite::create("FILENAME");

基本的にCCプレフィックスを削除

基本的にクラスのCCプレフィックスを削除する
ただし例外として、以下のクラスやマクロについてはプレフィックスを削除するだけではない

v2.2.3 v3.2rc0
CCObject Ref
CCLabelXXX Label
CCArray Vector
CCDictionary Map
CCString std::string
CCPoint Vec2
CCString
CCInteger
CCFloat
CCDouble
CCBool
etc.
Value
ccpマクロ Vec2クラスのコンストラクタVec2()
ccc3マクロ Color3BのコンストラクタColor3B()
ccc4マクロ Color4BのコンストラクタColor4B()
CCHogeMakeマクロ HogeクラスのコンストラクHoge()
cocos2d::cc_timeval timeval

など

Labelついて

  • LabelXXXも利用できるが、3.2rc0では既にdeprecated指定
  • 関数名の変更
v2.2.3 v3.2rc0
setFontSize() setSystemFontSize()
setFontFillColor() setTextColor()
enableStroke() enableOutline()

CCArray は Vector

  • 基本的にVectorに変更
  • Vector vのように定義
  • 配列にもたせられる型はRef Classを継承したもののみ
  • 現状Value型はRefを継承していないため、std::vectorを使用、もしくはCCArrayのままで警告を無視

CCDictionary は Map に

  • 基本的にMapに変更
  • Map mのように定義
  • マップのValueにもたせられる型はRef Classを継承したもののみ
  • 現状Value型はRefを継承していないため、std::mapを使用、もしくはCCDictionaryのままで警告を無視

CCString は std::string に

使い方

std::string str = Value("string");
std::string str = StringUtils::format("%d point", point);

sharedXXX() は getInstance() に

CCDirector::sharedDirector->setAnimationInterval(1.0/60);

から

Director::getInstance->setAnimationInterval(1.0/60);

といった書き方に変更

Deprecated警告を消したい場合

基本的には上記の方法で修正するべきだが、修正箇所が多いもの(CCArrayやCCDictionaryなど)は、次の文で挟むことで警告を消すことができる。

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated"
// ここにDeprecatedされている処理
#pragma clang diagnostic pop

callbackについて

ラムダ式によるコールバックを記述できるようになった

MenuItem *item = MenuItem::craete(this, menu_selector(ClassName::functionName));

  • 例1
ccMenuCallback callback = [](Ref *obj){
	// do something
};
auto item = MenuItem::create(“filename”, “filename”, callback);
  • 例2
auto item = MenuItem::create(“filename”, “filename”, [](Ref *obj){
	// do something
});

CCCallFunk系の変更

CCCallFunc

CCCallFunc *func = CCCallFunc::create(this, callfunc_selector(Hoge::function));

auto func = CallFunc::create(CC_CALLBACK_0(Hoge::function, this));

または

auto func = CallFunc::create([this](){
    this->function();
});

CCCallFuncN

CCCallFuncN *func = CCCallFuncN::create(this, callfuncN_selector(Hoge::function));

auto func = CallFuncN::create(CC_CALLBACK_1(Hoge::function, this));

または

auto func = CallFuncN::create([this](Ref *sender){
    this->function(sender);
});

などのように変更

タッチイベントの実装

以前記事を書いたので詳細はこちら

タッチイベントの登録と削除 [EventListener] - よく寝てちょっと食べる

まとめ

ひとまずはこの辺が主な変更すべき点でしょうか
Deprecated指定となったクラスの新たな名前を調べたい場合は、CCDeprecated.hを見てみると大体書いてあることが多いです