cocos2dの派生クラスで気をつけること2つ

また釣りっぽいタイトルになってしまった。。。
短いキーワードでタイトルを作ると自ずとそうなるのだろうか。


さて、cocos2d-xの書籍として「cocos2d-x 開発のレシピ」というのが発売されてまして、先日ひと通り読みました。
その上で、CCObjectを継承したクラスを作るときに、気をつけなければいけないと思った点が2点ありましたので紹介します。
つまり自分で調査した訳ではなく単なる抜粋です。すみません。

Cocos2d-x開発のレシピ

Cocos2d-x開発のレシピ


コンストラクタに例外が発生するような処理を書かない

軽量化のために、コンストラクタでは例外は扱わないようにしているらしいです。
ソースについては未調査です。
調査したら追記します。

基本的に、初期処理はinitXxx()メソッドを作ってそちらに書きましょう。
CCObject派生クラスにはinitXxx()メソッドは必ず用意するのがcocos2d-xの慣習(というか、cocos2d-iphoneから来たiOSの慣習だと思う)だと思うので用意するべきです。
あ、initXxx()は戻り値をboolにしてください。


create系メソッドを作ったらretain&autorelease

クラスを作ろときは (new Hogehoge())->init(); していらなくなったらretain、でもいいのですが、便利のためにコンビニエンスコンストラクタを作るのもいいですね。
cocos2d-xの命名規則ではcreate()やcreateWithXxx(Xxx xxx)が慣例のようです。

中では以下のようにします。
Hoge* ret = new Hoge();
if (ret != NULL && ret->init()) {
ret->autorelease();
return ret;
}

CC_SAFE_DELETE(ret);
return NULL;


CCSpriteとかのcreate()もこうなってるので見てみてください。