SWF を変換して Cocos2d-x で表示できる Super Animation Converter
Flash の swf ファイルを Cocos2d や Unity で表示するというのは、先日 GREE さんからオープンソースとして公開された LWF が有名ですが、Cocos2d-x では使用できませんでした。ところが去年末に Super Animation Converter というツールが公開されました。
cocos2d-x のフォーラムでのスレッド
http://www.cocos2d-x.org/boards/6/topics/19621?r=19711
GitHub
https://github.com/raymondlu/super-animation-samples
GitHub から落としてくると、中にサンプルプロジェクト(Cocos2d-x と Cocos2d-iPhone)とコンバータ、マニュアル(PDF) などが入っています。PDF にざっと目を通せば使い方はすぐに分かると思います。
サンプルプロジェクトを iPhone5 で実行したものを動画にしてみました。Super Animation Converter でどの程度のことができるかだいたい分かるかと思います。アニメーションしている部分は全て swf を変換したものです。特に後半の魚のアニメーションは CCSprite でアニメーションを作ろうと思うとかなり大変だと思います。
SWF 作成時の注意点
- グラフィックシンボルのみ使用可能。(画像を読み込んだときはグラフィックシンボルに変換しておく)
- ボタンやムービークリップは未対応。
- ベクターグラフィックは未対応。
- フレームラベルを1つ以上設定する。(Cocos2dx からアニメーションを再生するときに指定するため)
- Flash のパブリッシュ設定で「ムービーの圧縮」のチェックは外す。
Super Animation Converter での変換
リポジトリに含まれている Super Animation Conveter.app が変換ソフトになります。
- 起動後、ターゲット端末(iPad, iPhone, iPhone Retina が選択可能)を選択
- Import ボタンで swf を読み込む
- 書き出すフレームラベルを選択後 Export で書出す
- swf によって複数の png ファイルと sam というアニメーションの定義ファイルが生成される
Cocos2d-x への組み込み
Cocos2d-x のプロジェクトに下記4ファイルを追加します。
- SuperAnimCommon.h
- SuperAnimCore.cpp
- SuperAnimNodeV2.h
- SuperAnimNodeV2.cpp
アニメーションの表示
CCSize size = CCDirector::sharedDirector()->getWinSize(); std::string path = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("test.sam"); mAnimNode = SuperAnim::SuperAnimNode::create(path, 0, this); mAnimNode->setPosition(ccp(size.width/2, size.height/2)); this->addChild(mAnimNode); mAnimNode->PlaySection("start");
SuperAnim::SuperAnimNode::PlaySection メソッドで swf に作成したフレームラベルを指定してアニメーションを実行します。
フレームの再生終了で処理を行う
アニメーションが終了したときにコールバックを受けて処理をする場合は、SuperAnim::SuperAnimNodeListener の OnAnimSectionEnd メソッドをオーバライドします。
SuperAnim::SuperAnimNodeListener を継承
class HelloWorld : public cocos2d::CCLayer, public SuperAnim::SuperAnimNodeListener { private: SuperAnim::SuperAnimNode* mAnimNode; public: void OnAnimSectionEnd(int theId, std::string theLabelName); };
OnAnimSectionEnd メソッドをオーバライド
void HelloWorld::OnAnimSectionEnd(int theId, std::string theLabelName) { if (theId==0) { if (theLabelName=="start") { mAnimNode->PlaySection("start"); } } }
上記の例ではアニメーション終了後に再度アニメーションを再生して無限ループ再生させています。
フレームラベルを複数用意しておき、タップされたら違うフレームラベルを再生するなど可能です。
今まではデザイナーさんが Flash でアニメーションのイメージを作成して、それを元に fla ファイルを見ながら cocos2d-x でアニメーションを作成していました。Super Animation Converter を使用すれば UI のアニメーションなど簡単なアニメーションなら swf からそのまま変換して使えそうです。
なお、現在のバージョンは swf から変換後、アニメーションによってはかなりの数の png ファイルが生成されます。メモリの使用効率の面では最善とはいえず、テクスチャアトラスの対応が望まれるところです。制作者のブログにも将来のバージョンで対応予定とのことです。
http://raymondlu1983.blog.com/super-animation-converter/
変換ソフトの部分が公開されていないため、生成後のアニメーション定義ファイルを自分でいじって、テクスチャアトラスに対応することができないので、対応されることを心待ちにしております!
しかし、これは今後の開発でかなり使えそうです。
関連する投稿
コメントをどうぞ
Additional comments powered by BackType