【cocos2dx】CCMenuクラスの一歩進んだ使い方。

cocos2dxでは、CCMenuクラスを利用すれば簡単にボタンが作成できます。 私が今作っているアプリでも使っています。 今回は、このCCMenuクラスを少し深く勉強してみましょう。

selected()

CCMenuItemクラスに、selected()というメソッドがあります。 これを利用すれば、CCMenuクラスの画像が常に選択されたままで表示できます。

[c]

CCMenuItemSprite *item;
item->selected();

[/c]

私はこれでナビゲーションで今いるレイアーのボタンを「選択中」としてわかるように利用しています。

2014 3 8 blog1

activate()

続きましては、activate()です。 このメソッドを呼び出すと、CCMenuItemクラスで指定されたコールバック関数を呼び出せます。

[c]

CCMenuItemSprite *item;
item->activate();

[/c]

CCMeneItemのタグについて

CCMeneItemクラスとして利用している場合、個別のメニューに関してCCActionを使ってアニメーションさせたい場合、予めタグを割り振っておくと便利です。 [c]

CCMenuItemSprite *item;
item->setTag(1);

[/c]

このようにすれば、後から特定のCCMenuItemクラスを取り出すことができます。

CCMeneItemのタグを使った便利なコールバック関数の使い方

同じようなメニューをたくさん表示させ、ボタンの反応は個別に変えたい。 アイテムの一覧画面などでよく利用されている実装です。

これを先ほどのタグを使ってCCMenuクラスで実現することができます。 [参考 - サウザンドメモリー]

2014 3 8 blog2 5

実装方法

まずは、CCMenuを作成します。 たくさんCCMenuItemクラスが必要ですので、for文を使ったほうがいいでしょう。 [c] for (int j = 0; j < 50; j++) {

    CCSprite *menuItem1 = CCSprite::createWithSpriteFrameName("MySprite.png");
    CCSprite *menuItem2 = CCSprite::createWithSpriteFrameName("MySprite-hover.png");
    CCMenuItemSprite   *menuSprite = CCMenuItemSprite::create(menuItem1, menuItem2, menuSprite, menu_selector(PerformanceLayer::showWindow));

    ///////////
    ///////////

} [/c] ここで注意をしていただきたいのが、CCMenuItemクラスのtargetの所(第3引数)です。 ここにはCCMenuItemクラスを指定して下さい。

タグの設置

個別のCCMenuItemにタグを割り振ります。 [c]

    menuSprite->setTag(j);

[/c]

今回は、for文のjを利用しています。

コールバックメソッドを作成

CCMenuクラスは通常通り作成します。 コールバックメソッドは少し工夫が必要です。 [c] void PerformanceLayer::showWindow(CCMenuItemSprite *item){

int menutag = item->getTag();

} [/c]

このようにすれば、同じコールバック関数でも個別にメニューのタグを取り出せます。 このタグを利用して、反応を変えてあげれば良いのです。

注意点

CCMenuItemクラスのtargetを変更したことによって、コールバック関数内では、グローバル変数などが利用できません。 この点注意して下さい。