Flash Professional CS6 から、スプライトシートを生成する機能が追加されました。ステージ上やライブラリ内の、任意のシンボルや画像を、スプライトシートとして書き出せるようになっています。
また、複数のシンボルを選択してからこの機能を使うことで、テクスチャアトラスを生成することもできます。
テクスチャ (すなわちスプライトシート) の GPU へのアップロードは時間のかかる処理とされています。そのため、基本的には、シンボルごとにスプライトシート化するよりは、できるだけまとめてテクスチャアトラスにするのがお勧めと言われています。
(と言いつつ、デバイスによってはある大きさを超えると、アップロード時間が急に増えるものもあるそうです。可能な場合は、ターゲットの検証をした方がよいかもです)
AIR 3.3 からは、テクスチャを GPU にストリーミングする機能 (最初に低解像度の画像をアップロード) が追加されます。これで、多少は遅延があってもごまかせるようになるかもしれません。ちょっとだけ期待して待ちましょう。
なお、Stage3D でのテクスチャの利用に対しては、4084 個まででメモリは 128 MB という制限があります。そんなに重たいコンテンツを作るヒトは少ないでしょうが、便利になったからと使いすぎにはご注意を。
Starling 用の書き出し
以前の記事(MovieClip クラスを利用した Starling のアニメーション) で、Starling の MovieClip クラスが、スプライトシートを使ってアニメーションを再生することを紹介しました。Flash Pro CS6 の新機能で、Flash Pro でアセット制作 → Flash Builder (もしくはお好きなコードエディタ) で Starling のアニメーションづくり、というワークフローが実現できるようになります。
スプライトシート生成機能では、シンボルの各フレームをビットマップに変換してスプライトシートにまとめるのと平行して、スプライトシート内の各フレームの情報 (位置、大きさなど) の生成も行います。
この "情報" は、スプライトシートとは別ファイルに書き出されますが、その際に使用されるデータ形式がいくつかの候補から選択できるようになっています。これは、スプライトシートを利用する環境によって、要求するデータのフォーマットが異なることに対応するためです。
例えば、Flash Pro CS6 のスプライトシート生成パネルには、「データ形式」の オプションとして Starling が選べるようになっています。実際に Starling を選択した状態でスプライトシートの書き出しを行うと、スプライトシートの横に、同名の XML ファイルも生成されます。
このとき生成される XML ファイルの中身は、そのまま Starling の TextureAtlas のコンストラクタに渡せる形式です。面倒なデータの整形はツールに任せて、あとは、お定まりの ActionScript のコードを書くだけで、Starling のアニメーションが実現できます。
つまり、手順としては、
- シンボルを選択して書き出し
- 生成された 2 つのファイルを MovieClip のインスタンスを生成するテンプレに埋め込み
だけで、Flash アニメーションを Starling から利用できるわけです。デバイス向けコンテンツ制作も楽になりそう?です。
スプライトシート生成時のオプション
スプライトシート生成時に、いくつかのオプションを指定できます。以下はその簡単な説明です。
- 画像サイズ
自動を選ぶとツールが生成する巣画像サイズの最適値を判断。明示的に幅と高さの指定も可能 - 画像形式
PNG 8 bit を選択してファイルサイズを減らす、といった使い方ができる - 背景色
スプライトシートの背景に、透明、もしくは特定の色を指定する - アルゴリズム
以下のどちらかを選択- Basic:各フレームを順番に均一に並べる
- MaxRects:フレームを詰めて並べる。順番も無視する
- データ形式
スプライトシートの利用目的に合わせて、Starling, JSON などから選択 - 最適化オプション
配置の最適化を計算する際のオプション。指定できるオプションは、アルゴリズムとデータ形式に依存する- 回転:フレームを回転させて最適化
- カット:フレーム内の空白領域をカットして最適化
- フレームをスタック:同じ状態のフレームは 1 つにまとめる
- 余白
縁との余白、図の周りの余白を指定
スプライトシート生成ダイアログ内には、生成されるアニメーションを確認するための、プレビュータブも提供されています。
必要なオプションを指定したら、ファイル名を指定して、「書き出し」ボタンを押すと、スプライトシートとデータ形式に応じたデータファイルが生成されます。
画像形式はATF(Adobe Texture Format)で書き出せないんでしょうか?
こんにちわ。
この機能毎日使いまくりでかなりいけてるんですが、
なんでXMLの書き出しエンコードがUTF16なんでしょうね。
TexturePackerのXML(UTF8)と混在して動的にFileStreamで読み込んでいるときに
エラーになってしまい原因がわからず、数時間はまりました;
あ、エラーになるのは自分がUTF8だと限定してコードを書いていたからです。
ueno さん、こんにちは。
私も、Starling は ATF 使えるのに!とは思うのですが、
Flash Pro からの書き出し機能は無いようです。
imai さん、こんにちは。
いままで動的に読み込んだことが無かったので、エンコードの件は知りませんでした。
貴重な情報、ありがとうございます。