CocosBuilderのTimelineとCCActionが共存できなくてハマった
最近はCocosBuilderを使ったりして遊んでおります。
raywenderlichさんとこにもCocosBuilderTutorialがあるのですが、
日本語訳してくれた方がいるのでなんとかbuildまでこぎつけました。
CocosBuilder入門
CocosBuilderとXcodeがあればもうbuildできるとばかり思っていましたが、
buildまで到達するためにはccbiファイルを読み込むためのCCBReaderが必要で、
それはCocosBuilderには同梱されていないという罠。
なぜですかね。
CocosBuilderExampleをダウンロードして、そこからcopyしました。
ここでしばらく詰まりました。
「CCBReaderのバージョンがccbiを書きだしたCocosBuilderと違う」、といったerrorが出てbuildできませんでした。
CocosBuilder v3 alpha を使っていましたが、CCBReaderは v2.1用だったようです。
versionを合わせたらbuildできました。
Timeline Chainを設定していると、コードでCCActionをセットしても動かない
これには相当頭を悩まされている。
TimelineChain機能で無限ループさせるアニメーションを作ったときに、コードでCCMoveなどを指定してもかき消されてしまう。
例えば、以下のようなTimeline LoopアニメーションをつけたCCBファイルを用意する。
- Default Timelineで1秒間で一回転させるアニメーションを付ける
- Chain先をDefaultTImelineに指定して、無限ループさせる
そして、メインとなるSceneに先ほどのCCBを設置して再生すると、
グルグル回り続けるSpriteが表示される。
わーいこれは楽ちんだ!
これをCCMove等で動かせれば、CCBで基本動作を設定して
コードではユーザー操作で気軽に動かしたりできるぞ!
そう思っていた時期が私にもありました。
Timelineがループするたびに、全てのCCActionがもみ消される
最初はなんで自分で定義したCCMoveが動かないのか全然わからなかった。
コードを追っていくことで、CCBAnimationManagerというものにたどり着いた。
CCBReaderで読み込まれたオブジェクトはCCBAnimationManagerを保持している。
オブジェクトのuserObjectにアクセスすればコードで操作することも出来る。
参考:http://cbbandtqb.seesaa.net/article/300014623.html
CCBAnimationManagerが、Timelineで定義したアニメーションを実行してくれている。
その実行メソッドがこれ
- (void) runAnimationsForSequenceId:(int)seqId tweenDuration:(float) tweenDuration;
Timelineに割り当てられたSequenceIdを指定して、そのタイムラインを実行するもの。
こいつが犯人だった。
真っ先に [rootNode stopAllActions]; を呼んでいる。
なんてことしてくれるの…
とりあえずコードでアニメーションをつけたいNodeにはCocosBuilderでループアニメーションは付けず、
CCAnimationや基本となるActinoは全てコードで書きなおした。
すごく残念な気持ちになった。
なにかいい方法を知っている親切な方、教えてください。