SuperAnimationConverterの使い方メモ

最近cocos2d-xでSuperAnimationConverterを使っています。

SuperAnimationConverterとは、簡単に言うと、FlashProffesionalで作ったSWFをcocos2dシリーズで再生させるためのツールとライブラリです。
SWFをスプライトシート化するツールは多くありますが、キャラクタの体をパーツに分けてモーションさせるタイプのSWFを、パーツごとの画像に分割して再生できるのは、これとspineくらいでしょう。
spineは独自オーサリングツールですが、SuperAnimationConverterはFlashProffesionalでSWFを作って、それを変換するやり方なので、Flasherが慣れたツールを使えるという点でメリットがあるかと思います。

この記事ではツール側の細かな紹介は行いません。
githubからzipをダウンロードすると、中に説明書きのpdfが入っていますのでそれを読めばわかります。
https://github.com/raymondlu/super-animation-samples


基本的な使い方はsyuhariさんが紹介されています。
http://blog.syuhari.jp/archives/2428

ツール側はpdfを読めばわかるのですが、ソースコード側は全くリファレンスがありません。
ソースコードとサンプルを読めというスタンスですね。
なので、ソースを読んで調べたことをメモとしてまとめることにしました。


・スプライトシートの使い方
吐き出された画像をTexturePackerでスプライトシートにまとめて使うことができます。
ダウンロードしたzip内にあるpdfに使い方と注意点が書かれてますね。
スプライトシートを使わない場合は、Resourcesフォルダには、samファイルとバラバラ画像を置くことになりますが、
スプライトシートを使う場合はsamファイルと同名のplistファイルとスプライトシート画像ファイルを置けばよいです。
スプライトシートがある場合は、CCSpriteFrameCacheに登録され、そちらが使われるようになっています。

・アニメーションをループさせる方法
OnAnimSectionEndを使ってループ、、、させる必要はありません。
PlaySectionメソッドの第二引数にtrueを指定してください。デフォルトではfalse扱いになってます。

・終了時以外にもコールバック呼びたい!
タイムイベントを登録できます。
void registerTimeEvent(const std::string &theLabel, float theTimeFactor, int theEventId);
void removeTimeEvent(const std::string &theLabel, int theEventId);

使い方は、引数を見ればだいたいわかるかと思いますが、ダウンロードしたzipについてくるサンプルにサンプルコードが含まれています。
ラベルがタイムラインのラベル、イベントIDはタイムイベントごとに独自につけるID、タイムファクターは、タイムライン開始地点が0.0f、終了地点が1.0fです。

登録すると、指定した時間が経つとInit()でリスナーとして登録したクラスの以下のコールバックが呼び出されるので、実装しておきましょう。
void OnTimeEvent(int theId, std::string theLabelName, int theEventId);

現状、OnAnimSectionEndとOnTimeEvent以外にコールバックはありません。

・他のActionとの競合について
SuperAnimationConverterはcocos2d-xのActionは使っていません。
CCNodeのupdateとdrawをオーバーライドして処理を行なっています。
ですので、Actionとの競合は発生しません。つまり、stopAllActionsメソッドなどには反応しません。
中断したい場合は、Pause、Resumeなどのメソッドがあるのでそちらを使ってください。