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

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

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

selected()

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


    CCMenuItemSprite *item;
    item->selected();



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


activate()

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


    CCMenuItemSprite *item;
    item->activate();




CCMeneItemのタグについて

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

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



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


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

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

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


実装方法

まずは、CCMenuを作成します。
たくさんCCMenuItemクラスが必要ですので、for文を使ったほうがいいでしょう。
 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));

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

タグの設置

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

        menuSprite->setTag(j);



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

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

CCMenuクラスは通常通り作成します。
コールバックメソッドは少し工夫が必要です。
void PerformanceLayer::showWindow(CCMenuItemSprite *item){
    
        
    int menutag = item->getTag();
    
    
}

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

注意点

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

Related Posts Plugin for WordPress, Blogger...