LoginSignup
2
3

More than 5 years have passed since last update.

cocos2d-x 3.2 + Cocosbuilder 3.0-alpha5 でのCallback指定

Last updated at Posted at 2014-10-13

再生完了時のコールバック設定


auto ccbr = new ::cocosbuilder::CCBReader();
ccbr->getAnimationManager()->setAnimationCompletedCallback(target, selector);

target, selector にコールバックの関数を指定する。

(CCBReaderを扱うオブジェクトにCCBAnimationManagerDelegateを継承させ、ccbr->getAnimationManager()->setDelegate(継承オブジェクト)とする方法もある)

TimelineのCallbacksで設定したコールバックの設定

三行結論

  • 本来のやり方では、CCBReaderを扱うオブジェクトがCCBSelectorResolverを継承する必要があり、望ましくない
  • JS-Controlledが設定されている場合は文字列をキーとして関数が登録できる
  • cocosbuilder関連のコードを改変し、JS-Controlledが設定されていなくても文字列をキーとして関数を登録できるようにする

(本来の)実装の仕方

CCBReaderを扱うオブジェクトがCCBSelectorResolverを継承し、以下のコールバック用の関数
* onResolveCCBCCCallFuncSelector (TimelineのCallbacksに設定したコールバック)

を定義することで実装する。

ちなみに・・・。
このResolverは、MenuおよびCCControl用のコールバック
* onResolveCCBCCMenuItemSelector (Menuのクリックに対するコールバック)
* onResolveCCBCCControlSelector (CCControlに対するコールバック)

も持つ。

問題の提起

コールバックのためだけにCCBSelectorResolverを継承したくない。
単純に「文字列をキーとして関数を登録する」だけが望ましい。

問題の補足

ここで、実はCocosbuilderの設定をJS-Controlledにした場合、以下の様に文字列をキーとしてコールバック関数を登録できる。


ccb_reader->getAnimationManager()->setCallFunc(
    CallFunc::create(CC_CALLBACK_0(selector, target)),
    "key"
);

コード改変

JS-Controlled設定と同様の処理を、非設定の方でも行うようにする。

使い方の例

ヒットエフェクトのアニメーションにおいて、アニメーションの途中で敵がダメージを受ける演出を行うタイミングを指定をしたい。

  • CocosbuilderでのCallbacks指定

ccb_ss.png)

(option + クリックで登録可能)

任意のタイミングで
キー: damage
を登録する

  • コード

ccb_reader->getAnimationManager()->setCallFunc(
    CallFunc::create(CC_CALLBACK_0(Battle::damageToEnemy, this)),
    "damage"
);

補足

  • cocos2d-xおよびCocosbuilderのバージョンが違っても問題ない可能性があります(未検証)
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3