【cocos2dx】CCMenuクラスでボタンを作るときの注意点

ボタンやメニューを作る時に、非常に便利なクラスであるCCMenuクラスですが、利用する際にちょっとした注意点を発見したので、今回これを紹介します。

CCMenu

まずは、CCMenuは以下の様な形で利用することが多いでしょう。 [c]

CCMenuItemImage *mItem1 = CCMenuItemImage::create(
                                    "Normal1.png",
                                    "Selected1.png",
                                    this,
                                    menu_selector(HelloWorld::menuCallback1));


CCMenuItemImage *mItem2 = CCMenuItemImage::create(
                                    "Normal2.png",
                                    "Selected2.png",
                                    this,
                                    menu_selector(HelloWorld::menuCallback2));

mItem1->setPosition(ccp(200,100));
mItem2->setPosition(ccp(200,200));



CCMenu* pMenu = CCMenu::create(mItem1,mItem2,NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);

[/c]

2013 7 18 menu1

注意点

注意点は、個別のメニュー(上記の例ですとmItem1,mItem2)にアクセスができないことです

2013 7 18 menu2

例えば、メニューを追加後に、個別の「mItem2」だけ画像を表示させないようにすることができません。 [c]

//このような処理はできません。 mItem2-> setVisible(false);

     //ただし、メニュー全体を表示させなくすることはできます。   pMenu-> setVisible(false);

[/c]

作成するゲームの構造上、ボタンを個別に操作する場合は、メニューを個別のボタンごとに作成するか、CCSprite自体にタッチ処理を実装するようにしなくてはいけません。 皆さんご注意下さい。

[追記 7/18】

この注意点は、cocos2dxのバージョン2.1.3を利用した際に出たものです。 最新のバージョンでこの問題が解決しているという報告を受けています。 現在、利用しているcocos2dのバージョンに注意をしてください。