taoru's memo

Objective-c,cocos2d,など開発についてのメモ(andoroidも少しだけ)

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ファイルを用意する。

f:id:taorun:20130309031905p:plain

  • Default Timelineで1秒間で一回転させるアニメーションを付ける
  • Chain先をDefaultTImelineに指定して、無限ループさせる


そして、メインとなるSceneに先ほどのCCBを設置して再生すると、
グルグル回り続けるSpriteが表示される。

f:id:taorun:20130309032617p:plain

わーいこれは楽ちんだ!

これを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は全てコードで書きなおした。


すごく残念な気持ちになった。
なにかいい方法を知っている親切な方、教えてください。

QLOOKアクセス解析