Warning: Trying to access array offset on value of type bool in /home/koheizi/everything-beginner.com/public_html/programmer/wp-content/themes/luxeritas/inc/json-ld.php on line 114

cocos2d-xのcreateには注意!!

2014年3月4日

cocos2d-xでは、サンプルのコードで以下のようなcreate文があって
真似して作りたくなります。

/////////////////////////////
// 2. add a menu item with "X" image, which is clicked to quit the program
//    you may modify it.
// add a "close" icon to exit the progress. it's an autorelease object
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback));

ちなみにこのcreateは、
autoreleaseを読んでいまして、使い終わったら解放してくれます。
しか~し!!
CCControlButtonなど、ccontrol_selectorをつかったコントロールでやると
イベントが残ったままになり、暴走することがあります!!!
解決方法は、最底辺なので正確にはしりませんが、以下のような方法がありそうです。
1)コントロールは、クラスのメンバにしてデストラクタで解放する。

class SampleClass : public CCLayer{
    ....
    CCControlButton *closeButton_;
}

そしてデストラクタで確実に解放。

SampleClass::~SampleClass(){
    CC_SAFE_RELEASE_NULL(closeButton);
}

2)デストラクタでremoveAllChildrenを呼び出す。
こいつをやると、自身のコントロールにぶら下がっている子コントロールの
スケジューラやイベントをクリアしてくれるみたいです。

SampleClass::~SampleClass(){
    this->removeAllChildren();
}

まあ、正しい方向かしらないので、ちゃんと有識者の人に聞いたほうが良さそうですね。

cocos2d-x

Posted by koheizi