Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Swf研究会 アクションスクリプト実行処理系

6,991 views

Published on

  • Dating for everyone is here: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ♥♥♥ http://bit.ly/2Qu6Caa ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Swf研究会 アクションスクリプト実行処理系

  1. 1. アクションスクリプト 実行処理系 20012/09/25 SWF研究会#2 株式会社サイバーエージェント 森野耕平
  2. 2. 自己紹介• 森野 耕平 • @kohei_april20 • (株)サイバーエージェント • アメーバピグ • Pico World • JSでFlashPlayer開発・メンテナンス
  3. 3. 発表内容に関して• SWF4(FlashLite1.1)に関する内容です
  4. 4. agenda• SWFにおけるアクション• アクションのデータ構造• アクションモデル• 実装にあたってのハマりどころ
  5. 5. SWFにおけるアクション
  6. 6. アニメーション基本要素 Shape、MovieClip、定義系タグ TextField、Buttonなど timeline制御系タグ ShowFrame 表示制御 (表示・非表示、位置・変形、色)
  7. 7. パラパラ漫画 + アクション• プログラムで フレーム移動 式の評価 条件分岐   アニメーション制御 ループ イベント• インタラクティブ etc.
  8. 8. アクション情報はどこ にあるか?• フレームに記述されたアクション • 該当ShowFrameの前• ボタンイベントによるアクション • ボタン定義の中
  9. 9. アクションのデータ構造
  10. 10. DoAction• フレームに記述されたアクション• ShowFrame時に実行 header action (tag type = 12, length) end flag = 0 actions  ※後述のACTIONRECORD型
  11. 11. DefineButton• ボタンの定義タグ• ボタンへのイベントにより実行される アクションを持つ header action (tag type = 7, length) end flag = 0ボタンのIDや描画 actionsなどに関する情報
  12. 12. DefineButton2 • ボタンの定義タグ • DefineButtonの拡張版(状態遷移や キーボードイベント)header ボタンのIDや描画(tag type = 34, length) などに関する情報 action condition actions end flag = 0
  13. 13. ACTIONRECORD• ActionCodeによる命令とパラメータ• ActionCode毎にpayloadの読み方が決 められている0x80未満 ActionCode payload0x80以上 1byte 2bytes 可変長 payload length
  14. 14. 詳細は・・• SWF File Format Specification • http://www.adobe.com/devnet/swf.html
  15. 15. アクションモデル
  16. 16. SWF3アクションPlay WaitForFrameStop GetURLNextFrame StopSoundsPreviousFrame ToggleQualityGotoFrame SetTargetGotoLabel
  17. 17. SWF4アクションモデル• 機能拡張 • 式の評価 • 変数 • 条件分岐 • ループ• 仮想スタックマシンによって実現 • 計算モデルの一種 • 計算モデル:計算を理論的・抽象的 に考察するための数理モデル
  18. 18. スタックマシン• メモリがスタック(LIFO)形式の計算 モデル push pop 2 1 ※SWFでは文字列が  スタックされます
  19. 19. ・1をpush ・2をpush 1+2-3 ・加算 ・3をpush ・減算1 2 1 + 2 = 3 3 3 - 3 = 0 2 3 1 1 3 3
  20. 20. プログラムカウンタ• 次に実行するアクションのアドレスを 保持 PC(Program Counter) action action action action action
  21. 21. フロー制御• フロー制御系アクションはPCの値を変 更してフローを制御 PC JUMP Action action action action action Jump offset bytes 次のアクション offset値を持つ
  22. 22. SWF4アクション• 四則演算 Add/Divide/Multiply/Subtract• 比較演算 Equals/Less• 論理演算 And/Not/Or など• 文字列操作 StringAdd• スタック操作 Pop/Push• 型変換 ToInteger など• フロー制御 Call/If/Jump• 変数 SetVariable/GetVariable• Movie制御 SetProperty など など• ユーティリティ RandomNumber
  23. 23. のアクション 0x2D• 仕様書に無い・・?• fscommand2()でした • デバイスの情報取得したりするやつfscommand2(command:String, parameter1:String,...parameterN:String) : Void手順1. 引数の数countをポップ2. コマンド名をポップ3. 引数の値をcount個ポップ4. 取得したコマンドを取得した引数で実行し、結果をプッシュ
  24. 24. 実装にあたっての ハマリどころ
  25. 25. ハマりどころ• 実行順序• 実行タイミング• プロパティ変更後のレンダリング↑仕様がよくわからない
  26. 26. 仕様がわからない所は1. 本家の挙動をよく見る• テストケースSWF作成• フレームレートを下げてみる2. 仮説を立てる3. 実装4. 検証5. 繰り返す
  27. 27. (推測される)1フレーム処理フロー• MCの更新処理(rootから再帰的に) • ディスプレイリストから削除するオブジェ クトを削除(RemoveObject) • 子供を再帰的に更新(addされた順) • アクションをキューに追加 • ディスプレイリストに追加するオブジェク トを追加し、更新(PlaceObject)• アクションの実行• レンダリング(深度順)
  28. 28. まとめ• アクションはパラパラ漫画をプログラ ム制御するもの• データはフレームアクションとボタン アクションを読めばよい• 基本はコードによる命令とスタックマ シン• 仕様書に無いところは実験あるのみ
  29. 29. ご清聴ありがとうございました 森野 耕平(@kohei_april20)

×