v2.1.5からv3.0beta2へ、まず動くこと、を目標にした作業メモ
多分、cocos2d iphoneから移行してきた人向き
1)deprecated warningを削除
全ソースからクラスプレフィックスCCを削除
シングルトン取得メソッドの変更shared*() → getInstance()
など
2)コーディングスタイルをあわせる
特にフィールドのプレフィックスが"m_"から"_" に変わっているため、派生クラスで利用していた場合、対処は必須
3)cocos2d::CCObject::init*(...) → cocos2d::Object::crete*(...)
cocos2d::CCObject()派生クラスでinit()系メソッドがpublicからprotectedに変更されたため、継承クラスやインスタンスを自前でnewしていた箇所の修正が必要
new → init()はcreate() → retain()に比べautorelease()やretain()
の呼び出しが抑えられていたのだが…、はい、誤差です
4)copyWithZone(cocos2d::CCZone pZone*) → clone()
cocos2d::CCObjectの基底クラスであるcocos2d::CCCopyingおよびその引数として用意されていたcocos2d::CCZoneが廃止されたことからcopyWithZone()メソッドが消滅
コピーが必要な場合、cocos2d::Clonableを継承しclone()メソッドを実装
5)cocos2d::CCSring → std::string
cocos2d::CCStringに対応するcocos2d::Stringがないこと、事実上の吸収先とも言えるcocos2d::Valueがcocos2d::Object派生でないことからstd::stringへ移行
C++11よりCOWが廃止されたことからcocos2d::CCStringをポインタ渡ししていた箇所は確実にstd::stringの参照渡しとしてパフォーマンスの無用な低下を防ぐ
6)cocos2d::CCArray → cocos2d::Vector
cocos2d::CCArrayはcocos2d::CCObject派生、cocos2d::Vectorは基底クラス、ということで参照カウンタがない
ライフサイクル管理が必要な場合、std::shared_ptrを導入
cocos2d::Vectorを簡単に言うと内部で参照カウンタ操作が実装されたstd::vectorラッパー
主な操作はcoco2d::CCArray → cocos2d::Vectorとして以下のように対応する
objectAtIndex → at
count → size
addObject → pushBack
removeObject → eraseObject
removeObjectAtIndex → erase
CCARRAY_FOREACH(array, obj) → for (auto &it : vector)
7)cocos2d::CCDirectory → cocos2d::Map
CCArrayと同じくcocos2d::CCObject派生から基底クラスになっているため参照カウンタがない
ライフサイクル管理が必要な場合、std::shared_ptrを導入
cocos2d::CCArrayに対してこちらは参照カウンタ操作が実装されたstd::unordered_map(もしくはstd::map)ラッパー
主な操作はcoco2d::CCDictionary → cocos2d::Mapとして以下のように対応する
objectForKey → at
count → size
setObject(value, key) → insert(key, value)
removeObjectForKey → erase
CCDICT_FOREACH(dict, obj) obj->hoge(); → for (auto it = map.begin(): it != map.end(); ++it) (*it).second->hoge();
8)cocos2d::CCInteger、CCFloat、CCDouble etc.
cocos2d::CCString同様cocos2d::Valueに吸収
これらをCCArrayで管理していた場合、std::vectorに切り替え、ポインタではなくインスタンスを格納する
この際、参照渡しや右辺参照を使い、インスタンスの生成を押さえるとベター
9)その他
C++11およびv3.0固有の機能に対応
autoの利用、overrideキーワードの追加、cocos2d::Layerのイベントリスナー対応、など