SlideShare una empresa de Scribd logo
1 de 29
アクションスクリプト
  実行処理系
  20012/09/25 SWF研究会#2
  株式会社サイバーエージェント
        森野耕平
自己紹介


• 森野 耕平
 • @kohei_april20
 • (株)サイバーエージェント
   • アメーバピグ
   • Pico World
   • JSでFlashPlayer開発・メンテナンス
発表内容に関して




• SWF4(FlashLite1.1)に関する内容です
agenda


• SWFにおけるアクション
• アクションのデータ構造
• アクションモデル
• 実装にあたってのハマりどころ
SWFにおける
アクション
アニメーション基本要素

                 Shape、MovieClip、
定義系タグ           TextField、Buttonなど



                              timeline




制御系タグ
                 ShowFrame
        表示制御
        (表示・非表示、位置・変形、色)
パラパラ漫画   +   アクション



•   プログラムで         フレーム移動
                   式の評価
                   条件分岐
      アニメーション制御    ループ
                   イベント
• インタラクティブ         etc.
アクション情報はどこ
   にあるか?

• フレームに記述されたアクション
 • 該当ShowFrameの前
• ボタンイベントによるアクション
 • ボタン定義の中
アクションの
データ構造
DoAction
• フレームに記述されたアクション
• ShowFrame時に実行
   header                    action
   (tag type = 12, length)   end flag = 0




                 actions
                  ※後述のACTIONRECORD型
DefineButton
• ボタンの定義タグ
• ボタンへのイベントにより実行される
  アクションを持つ

    header                   action
    (tag type = 7, length)   end flag = 0




ボタンのIDや描画               actions
などに関する情報
DefineButton2
    • ボタンの定義タグ
    • DefineButtonの拡張版(状態遷移や
      キーボードイベント)

header                    ボタンのIDや描画
(tag type = 34, length)
                          などに関する情報




                                      action
     condition             actions    end flag = 0
ACTIONRECORD

• ActionCodeによる命令とパラメータ
• ActionCode毎にpayloadの読み方が決
  められている


0x80未満            ActionCode       payload



0x80以上

         1byte   2bytes           可変長

                 payload length
詳細は・・



•   SWF File Format Specification
    •   http://www.adobe.com/devnet/swf.html
アクションモデル
SWF3アクション



Play            WaitForFrame
Stop            GetURL
NextFrame       StopSounds
PreviousFrame   ToggleQuality
GotoFrame       SetTarget
GotoLabel
SWF4アクションモデル

• 機能拡張
 • 式の評価
 • 変数
 • 条件分岐
 • ループ
• 仮想スタックマシンによって実現
 • 計算モデルの一種
   • 計算モデル:計算を理論的・抽象的
     に考察するための数理モデル
スタックマシン
• メモリがスタック(LIFO)形式の計算
  モデル

      push       pop




             2
             1         ※SWFでは文字列が
                        スタックされます
・1をpush
                            ・2をpush
    1+2-3                   ・加算
                            ・3をpush
                            ・減算



1   2       1 + 2 = 3   3         3 - 3 = 0




        2                     3
    1   1               3     3
プログラムカウンタ
• 次に実行するアクションのアドレスを
  保持


         PC(Program Counter)




 action action action action action
フロー制御
• フロー制御系アクションはPCの値を変
  更してフローを制御


         PC    JUMP


        Action
 action        action action action
         Jump
                 offset bytes

                                次のアクション
         offset値を持つ
SWF4アクション

• 四則演算 Add/Divide/Multiply/Subtract
• 比較演算 Equals/Less
• 論理演算 And/Not/Or など
• 文字列操作 StringAdd
• スタック操作 Pop/Push
• 型変換 ToInteger など
• フロー制御 Call/If/Jump
• 変数 SetVariable/GetVariable
• Movie制御 SetProperty など など
• ユーティリティ RandomNumber
のアクション 0x2D
• 仕様書に無い・・?
• fscommand2()でした
 • デバイスの情報取得したりするやつ
fscommand2(command:String,
 parameter1:String,...parameterN:String) : Void

手順
1. 引数の数countをポップ
2. コマンド名をポップ
3. 引数の値をcount個ポップ
4. 取得したコマンドを取得した引数で実行し、結果をプッシュ
実装にあたっての
 ハマリどころ
ハマりどころ

• 実行順序
• 実行タイミング
• プロパティ変更後のレンダリング

↑仕様がよくわからない
仕様がわからない所は

1. 本家の挙動をよく見る
•   テストケースSWF作成
•   フレームレートを下げてみる
2. 仮説を立てる
3. 実装
4. 検証
5. 繰り返す
(推測される)
1フレーム処理フロー

• MCの更新処理(rootから再帰的に)
 • ディスプレイリストから削除するオブジェ
   クトを削除(RemoveObject)
 • 子供を再帰的に更新(addされた順)
 • アクションをキューに追加
 • ディスプレイリストに追加するオブジェク
   トを追加し、更新(PlaceObject)
• アクションの実行
• レンダリング(深度順)
まとめ


• アクションはパラパラ漫画をプログラ
  ム制御するもの
• データはフレームアクションとボタン
  アクションを読めばよい
• 基本はコードによる命令とスタックマ
  シン
• 仕様書に無いところは実験あるのみ
ご清聴ありがとうございました
    森野 耕平(@kohei_april20)

Más contenido relacionado

Destacado

How to read SWF
How to read SWFHow to read SWF
How to read SWFYo Ya
 
Flash Playerの作り方
Flash Playerの作り方Flash Playerの作り方
Flash Playerの作り方Yu Kobayashi
 
Upcycling Instruction: Developing effective approaches to teaching experience...
Upcycling Instruction: Developing effective approaches to teaching experience...Upcycling Instruction: Developing effective approaches to teaching experience...
Upcycling Instruction: Developing effective approaches to teaching experience...Veronica Douglas
 
Good Design Doesn't Happen Alone
Good Design Doesn't Happen AloneGood Design Doesn't Happen Alone
Good Design Doesn't Happen AloneVeronica Douglas
 
Making It Your Own: Transitioning Into a New Electronic Resources Role
Making It Your Own: Transitioning Into a New Electronic Resources RoleMaking It Your Own: Transitioning Into a New Electronic Resources Role
Making It Your Own: Transitioning Into a New Electronic Resources RoleAlana Nuth
 

Destacado (6)

How to read SWF
How to read SWFHow to read SWF
How to read SWF
 
Flash Playerの作り方
Flash Playerの作り方Flash Playerの作り方
Flash Playerの作り方
 
Librarian Design Share
Librarian Design ShareLibrarian Design Share
Librarian Design Share
 
Upcycling Instruction: Developing effective approaches to teaching experience...
Upcycling Instruction: Developing effective approaches to teaching experience...Upcycling Instruction: Developing effective approaches to teaching experience...
Upcycling Instruction: Developing effective approaches to teaching experience...
 
Good Design Doesn't Happen Alone
Good Design Doesn't Happen AloneGood Design Doesn't Happen Alone
Good Design Doesn't Happen Alone
 
Making It Your Own: Transitioning Into a New Electronic Resources Role
Making It Your Own: Transitioning Into a New Electronic Resources RoleMaking It Your Own: Transitioning Into a New Electronic Resources Role
Making It Your Own: Transitioning Into a New Electronic Resources Role
 

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

ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)libpanda
 
[JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手!
[JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手! [JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手!
[JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手! Akio Katayama
 
PHPでのSWF編集とその応用
PHPでのSWF編集とその応用PHPでのSWF編集とその応用
PHPでのSWF編集とその応用Yo Ya
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!yoshikawa_t
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.nextyoshikawa_t
 
スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集Hiroaki Wakamatsu
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみたEric Sartre
 
ここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaHiroshi Sakate
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Norito Agetsuma
 
㉑CSSでアニメーション!その2
㉑CSSでアニメーション!その2㉑CSSでアニメーション!その2
㉑CSSでアニメーション!その2Nishida Kansuke
 
データフロー自動化ツールの考え方
データフロー自動化ツールの考え方データフロー自動化ツールの考え方
データフロー自動化ツールの考え方fumoto kazuhiro
 
cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行kunihikokaneko1
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
OpenFOAM の Function Object 機能について
OpenFOAM の Function Object 機能についてOpenFOAM の Function Object 機能について
OpenFOAM の Function Object 機能についてFumiya Nozaki
 

Similar a Swf研究会 アクションスクリプト実行処理系 (20)

ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)ActionScriptを使わないFlash勉強会 #1(前日版)
ActionScriptを使わないFlash勉強会 #1(前日版)
 
[JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手!
[JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手! [JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手!
[JAWS-UG 三都物語 2014] 三都物語でAmazon SWFと握手!
 
PHPでのSWF編集とその応用
PHPでのSWF編集とその応用PHPでのSWF編集とその応用
PHPでのSWF編集とその応用
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
 
スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集スマートフォンブラウザ不具合特集
スマートフォンブラウザ不具合特集
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
初めてのCPUを作ってみた
初めてのCPUを作ってみた初めてのCPUを作ってみた
初めてのCPUを作ってみた
 
Android gameprogramming
Android gameprogrammingAndroid gameprogramming
Android gameprogramming
 
ここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alphaここが変わったTizen sdk2.0alpha
ここが変わったTizen sdk2.0alpha
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
 
㉑CSSでアニメーション!その2
㉑CSSでアニメーション!その2㉑CSSでアニメーション!その2
㉑CSSでアニメーション!その2
 
データフロー自動化ツールの考え方
データフロー自動化ツールの考え方データフロー自動化ツールの考え方
データフロー自動化ツールの考え方
 
cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
OpenFOAM の Function Object 機能について
OpenFOAM の Function Object 機能についてOpenFOAM の Function Object 機能について
OpenFOAM の Function Object 機能について
 

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

Notas del editor

  1. \n
  2. アメーバピグとかPicoWorldというピグの海外版の立ち上げや運用など\nどちらかというとサーバサイド\n
  3. \n
  4. SWF内でのアクションが他の要素とどう作用しているか\n\nFlashPlayer実装の足がかりに\n\n
  5. \n
  6. 基本はパラパラ漫画\n
  7. \n
  8. トリガはこの2種類\n
  9. \n
  10. \n
  11. 最近は使われていないかも\n
  12. \n
  13. 予め決められた命令コード\n
  14. \n
  15. データを読み取った後にどうするか\nどのようなアクションがあってどう実行するのか\n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n