DXRubyでFlash(swf)アニメを再生してみる実験
2014/05/23
概要
DXRubyでFlashアニメを再生する。
swfmill で swf→xml変換した xmlファイルを利用する。
必要なもの
サンプルを動かすために必要
swf・xmlを自作する際に必要
サンプルの動かし方
ruby playxmlmovie.rb を実行。
以下に、他のスクリプトから呼んで使う例を示す。
require_relative "playxmlmovie"
m = PlayXmlMovie.new("hoge.xml")
m.init
Window.loop do
break unless m.play
end
制限事項
対応済み
- ビットマップ画像の移動・拡大縮小・回転・傾斜・半透明表示
- 輝度変更 (明度変更)、色変更
- 簡素な階層のスプライト (MovieClip)
-
静止テキスト
- デバイスフォント("_ゴシック", "_明朝", "_等幅" 等)使用
- 入れ子になってない簡素なもの)
未対応
- シェイプ(ベクターデータ)
- サウンド
- ActionScript
- 複雑な階層のスプライト(MovieClip)
- テキストの拡大縮小・回転・傾斜、入れ子構造
自作swfを再生させる際の手順
- Suzuka で swf を作成。
-
swfmill で、swf を xml に変換。
- 例: swfmill swf2xml hoge.swf hoge.xml
-
(必要であれば) xml_data_remove.rb で xmlファイルサイズを小さくする。(xml中のdataタグ=画像データ部分を削除できる)
- 例: ruby xml_data_remove.rb hoge.xml
- HugFlash で、swfから画像を抽出。
HugFlashの設定について
- 設定 → Picture → pngの書き出し設定で、ガンマ値を「1/2.2」にしておく。ガンマ値が「1」だと表示が白っぽくなるため。
-
設定 → Output
-
以下の項目にチェックを入れる。
- 「ソースファイルと同じ場所に出力~」
- 「ソース/カテゴリー毎にフォルダを構築」
- 「ID番号を使う」
- SaveName は、「ソース」 + 連番「[n]」
例えば、./hoge.xml というファイルがあったら、./hoge/BMP/PNG/ フォルダの中に hoge[1].png、hoge[4].png ... と画像ファイルが置いてあればOK。
ビットマップ画像の扱いについて
- Suzuka で swf を作成する場合は、ビットマップ画像として jpg、png、bmp、gif が使える。swf出力時、bmp や gif は png圧縮で出力される。
- Flash CS5 で swf を作成する場合、jpg圧縮で出力してしまうと、swfmill は正常なxml変換ができなくなる。全ての画像をpng圧縮で出力する必要がある。(「ライブラリ」上で画像を複数選択 → 右クリック → プロパティ → 圧縮設定を変更)
Windows7上でSuzukaを使用する際の注意点
Windows7 + Suzuka で mp3 を扱うと不正終了するので、Suzuka.exe を右クリック → プロパティを開いて、以下を設定する。
- 互換性 → 「互換モードでこのプログラムを実行する」にチェックを入れる → 「Windows 98 / Windows Me」を選ぶ。
- 「視覚テーマを無効にする」にチェックを入れる。
- 「管理者としてこのプログラムを実行する」にチェックを入れる。
動作確認環境
License
playxmlmovie.rb、xml_data_remove.rb は Public domain とします。
※ Nokogiri は MITライセンス。
謝辞
サンプルswf内の静止画像作成時、以下のソフト・モデルデータを利用させていただきました。この場を借りて御礼申し上げます。