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

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




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

前回:【cocos2dx】CCMenuクラスの一歩進んだ使い方。 | albatrus.com

メニューのアニメーション

CCSpriteクラスと同じように、CCMenuItemSpriteクラスでのCCActionが利用できます。
これを利用すれば、動いているメニューを実装することができます。



    CCMenuItemSprite *_menuItem = CCMenuItemSprite::create(menuItem1, menuItem2, this, menu_selector(MainLayer::menuAction));
    CCScaleTo *scale = CCScaleTo::create(0.1f, 0.9f);
    CCScaleTo *scale2 = CCScaleTo::create(0.1f, 1.05f);
    CCScaleTo *scale3 = CCScaleTo::create(0.05f, 1.00f);
    CCSequence*seq = CCSequence::create(scale,scale2,scale3,NULL);
    CCRepeatForever *req = CCRepeatForever::create(seq);
    _menuItem->runAction(req);


なお、CCMenuItemSpriteクラスに指定するCCSprite型の変数もCCActionが利用できるが、アンカーポイントに違いがあるので動きに注意をしてください。


透明なメニュー

メニューを常に表示させるのではなく、「表示・非表示」をどのように切り替えてますか。
この場合は、setVisible(bool型)を利用すれば簡単に実装ができます。


     CCMenu *_menu;
     _menu->setVisible(false);


このsetVisible(bool型)に関しては,CCMenuItemクラス個別に指定もできます。
すべてのメニューを非表示にする時には、CCMenuクラスに、個別に非表示にする際にはCCMenuItemクラスに実装をしましょう。

setOpacity()

表示・非表示」では、setOpacity()も利用することができます。
こちらに関しては、半透明にもできたりします。

ただ、一番の特徴は完全に透明にしてもメニューとして利用できることです。

これを利用すれば、「何もない所を触って何かアクションを起こしたりする」ことが簡単にできます。

     CCMenuItemSprite *_menuItem;
     _menuItem->setOpacity(0);



メニューの画像を変更する

メニューで利用しているCCSpriteクラスの画像を途中で変更します。
これは、通常のCCSpriteで利用している方法が使えますが、どのSpriteを変えるかを取り出すのがとても苦労します。

下準備として、CCMenu・CCMenuItemSpriteクラスにタグを割り振っておきます。

      CCMenu *_menu;
      _menu->setTag(100);
 
      CCMenuItemSprite *_menuItem;
      _menuItem->setTag(1);



これを元にしてCCSpriteを取り出し、変更します。

      CCMenu *menu = (CCMenu*)this->getChildByTag(100);
      if (menu) {
        
          CCMenuItemSprite * item = (CCMenuItemSprite*)menu->getChildByTag(1);

          if (item) {
            
            CCSprite *sprite = (CCSprite*)item->getNormalImage();
            if (sprite) {

                CCSpriteFrame *frame =CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("change-sprite-name.png");
                sprite->setDisplayFrame(frame);


            }
          }
       }



最後に

実装は面倒ですが、CCMenuを使えば、かなり自由にできるようになりますので、ぜひ参考にしてみてください。

上記内容と関係ないのですが、現在ブログが非常に不安定で、一部プラグインが使えずに画面が見難くなっています。
大変申し訳ありません。


Cocos2d‐x開発のレシピ―iOS/Android対応Cocos2d‐x開発のレシピ―iOS/Android対応
松浦 晃洋,齊藤 建二,古木 映治

秀和システム
売り上げランキング : 41015

Amazonで詳しく見る


Related Posts Plugin for WordPress, Blogger...