そもそもSWFってなんなのか

連休中にポートフォリオサイト作ってたわけですが、
Flashで作ったサイトから外部SWFを表示しようとすると
あれこれと不都合が出てきてて困ってます。


どうやら外部SWF(AS2)側で_rootを参照
しているところで問題がおきているようで、
AS3のSWFからAS2のSWF呼んでるのが悪い?とか
原因をいろいろ考えているうちに、そもそも

  • SWFの中身がどうなってて
  • それをFlash Playerがどうやって再生してくれてるのか

というあたりを知らないことに気付き、
ちょっと調べてみました。



  • ファイル全体は、ヘッダ + 本体という構成になっている
  • データの中身は完全なバイナリ形式
  • ヘッダの構造
    • シグネチャ "FWS"
    • バージョン番号
    • ファイルの長さ
    • フレームサイズ
    • フレームレート
    • 全体のフレーム数
  • 本体はフレームとタグという単位に分割さている
  • 複数のタグをまとめてフレームという単位になる
  • タグには定義タグと操作タグがある
    • 定義タグで図形の形を決めて、操作タグで表示する
    • 定義タグは複数のシェイプを組み合わせて一つの図形を作る
    • ベクタデータをコンパクトに表現するのがシェイプ
    • シェイプには移動、曲線、直線、終了の種類がある
  • ActionScriptActionScript 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で作る

っていう手が考えられるので、
引き続き試行錯誤します。