swfからスプライトシートを吐き出す方法のメモ

前の記事の続きです。

以下の記事を大いに参考にさせていただきました。
http://d.hatena.ne.jp/DiegoTristan/20121004/1349371840?_ts=1350580477

仕事上、過去資産のswfファイルをスプライトシートに吐き出して
JSで同じモーションをさせる必要が生じました。

FlashCS6のライセンスを持っていれば、それを使ってスプライトシートを生成できた、むしろCreateJSでJSコードに落とせたと思うのですが、CS6持ってないし、そもそも古いバージョンのブラウザもサポートする必要があったのでCanvasベースのライブラリだと困ります。

その話はさておき、以下のツールを試しました。この記事はその備忘録です。
・TexturePacker
・Zoe(CreateJS開発チーム作)
・SwfAnimationConverter(マルチデバイスLab様作)
・SWFSheets(KiethPeterさん作)

下の3つはAIRアプリで、SWFからスプライトシートを出力する機能に特化しています。
TexturePackerはSWFからスプライトシートを出力もできますが、複数画像を一枚のスプライトシートにまとめるのが元々の機能です。
すべてMacにもインストールできます(AIRアプリは当然ですが)。

TexturePackerはひとつ前の記事に書いたとおり、2000円くらいで有償版を買わないと実用になりません。
でも実績あるソフトですし実用性は十分なので買って損は無いと思います。


さて、最終的に私はSWFSheetを使って複数のswfにそれぞれスプライトシートを出力し、それをTexturePackerでさらにまとめてひとつのスプライトシートにしました。

それはなぜかというと、上3つのアプリケーションはSWFのルートのタイムラインを読み取る仕組みになっていた(動作からの想像です)からです。
SWFにおいてルートのタイムラインが24フレームのムービーであれば、24枚の画像で出力されました。
(ルートに結びついたタイムラインの入れ子構造まで読み取れるのかは謎です。僕はタイムライン構造を見れていないので。)

これが自分にとっては厄介で、
たまたま自分の持っていたswfのルートが1フレーム扱いになっていたのか、
上の3つのアプリケーションは最初の1フレーム分しか画像を生成してくれませんでした。

それに対し、SWFSheetはタイムライン構造など見ておらず、ムービーを再生して、その途中で設定された枚数のスナップショットを撮影するような仕組みになっているようです。
タイムライン構造気にせずに、ムービーとして再生できさえすればスプライトシートを出力できるし、タイムラインが何フレーム分か気にしなくていいです。
SWFSheetは個人で作られてるからか使い勝手に難がありますが、
ある意味、タイムライン構造を読み取るような高価な機能が無いために使いやすくなっています。


ただSWFSheetはあくまで1swfファイルに1スプライトシートを生成するので、複数のムービーを1スプライトシートにまとめるのはTexturePackerの出番です。
TexturePackerは使い勝手のよいソフトなので触っていれば慣れてすぐに使いこなせるようになるとは思います。
現行のバージョンでひとつ気になったのは、デフォルトの設定であるターゲットが「cocos2d」だと、上の作業がうまくいきませんでした。
というのは、正常にpngファイルを生成しませんでした。

そこでターゲットを「starling/sparrow」(だったかな)にしたところ、理由は不明ですが期待通りのpngを生成できました。


他にもツールはあるでしょうし、Adobeのツールを何でも使える環境ならそれらでやる方法はあると思います。
ここで書いたのは、アマ開発者がお金をかけずにやれる方法だと思っていただければ。