ボタンやメニューを作る時に、非常に便利なクラスである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]
注意点
注意点は、個別のメニュー(上記の例ですとmItem1,mItem2)にアクセスができないことです。
例えば、メニューを追加後に、個別の「mItem2」だけ画像を表示させないようにすることができません。 [c]
//このような処理はできません。 mItem2-> setVisible(false);
//ただし、メニュー全体を表示させなくすることはできます。 pMenu-> setVisible(false);
[/c]
作成するゲームの構造上、ボタンを個別に操作する場合は、メニューを個別のボタンごとに作成するか、CCSprite自体にタッチ処理を実装するようにしなくてはいけません。 皆さんご注意下さい。
[追記 7/18】
この注意点は、cocos2dxのバージョン2.1.3を利用した際に出たものです。 最新のバージョンでこの問題が解決しているという報告を受けています。 現在、利用しているcocos2dのバージョンに注意をしてください。