そもそもSWFってなんなのか
連休中にポートフォリオサイト作ってたわけですが、
Flashで作ったサイトから外部SWFを表示しようとすると
あれこれと不都合が出てきてて困ってます。
どうやら外部SWF(AS2)側で_rootを参照
しているところで問題がおきているようで、
AS3のSWFからAS2のSWF呼んでるのが悪い?とか
原因をいろいろ考えているうちに、そもそも
- SWFの中身がどうなってて
- それをFlash Playerがどうやって再生してくれてるのか
というあたりを知らないことに気付き、
ちょっと調べてみました。
- ファイル全体は、ヘッダ + 本体という構成になっている
- データの中身は完全なバイナリ形式
- ヘッダの構造
- シグネチャ "FWS"
- バージョン番号
- ファイルの長さ
- フレームサイズ
- フレームレート
- 全体のフレーム数
- 本体はフレームとタグという単位に分割さている
- 複数のタグをまとめてフレームという単位になる
- タグには定義タグと操作タグがある
- 定義タグで図形の形を決めて、操作タグで表示する
- 定義タグは複数のシェイプを組み合わせて一つの図形を作る
- ベクタデータをコンパクトに表現するのがシェイプ
- シェイプには移動、曲線、直線、終了の種類がある
- ActionScriptはActionScript Byte Codeとして埋め込まれている
- FlashPlayerはShowFrameタグに出くわすまでの全タグを処理する
(情報ソース)
Flash フォーマットの秘密
SWFファイルフォーマット
なるほど。
中身の構造はだいたいわかったけど、
「AS3のSWFからAS2のSWFをロードしたときに、
Stage.widthとか_root._xmouseはどうなるのか」
というところはわからずじまい。
最終的にはコレを読むしかないのかな〜
Download the SWF file format specification (PDF, 940K)
とりあえず、
- 直接外部SWFをロードせず、HTML経由にしてみる
- AS3で全部作り直してみる
- 呼び出し側のサイトをHTMLで作る
っていう手が考えられるので、
引き続き試行錯誤します。