SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
JSplash
SWF to Javascript Converter
                              gyuque
最近のブラウザは爆速らしい

                   Google V8 benchmark (Score)

   700
   600
   500
   400
   300
   200
   100
     0
             IE7        Chrome       Fx3.1        Safari


         http://japan.cnet.com/blog/kichi/2008/09/23/entry_27014819/
せっかくだから無駄遣いしよう

  昔から、パワーの無駄遣いと言えばゲーム


            スプライトがないPC-66でスペハリ
            (変態)




            8ビット機で3Dポリゴン
            (変態)
目標



     Flashのゲームを
     どうにかして
     Javascriptで動かす
手順



     どうにかして読み込む
     どうにかして描画する
     どうにかしてASを動かす
読み込み

swfmill というのがあります
http://swfmill.org/




swfバイナリ


                      <?xml version=quot;1.0quot;?>
                      <swf version=quot;7quot; compressed=quot;1quot;>
                       <Header framerate=quot;30quot; frames=quot;18quot;>
     XML                <size>
                         <Rectangle left=quot;0quot; right=quot;14000quot; top=quot;0quot; bottom=quot;8000quot;/>
                        </size>
                        <tags>
                         <SetBackgroundColor>
読み込み




            JS
       重!   JSplash.load_swf( {
             header: {frameRate: 40, frames: 18, width:
            14000, height: 8000},
             taglist: [

            {tag:JSplash.tSetBackgroundColor, rgb:'dd
            dddd'} /*- 0 -*/,
            {tag:null},
            {tag:null},
             {tag:JSplash.tDoAction},

            軽い+パース不要
描画

シェイプデータをSVGに変換する

                         SVG




 Official Flash Player
ActionScript


    AVMを実装する?     考えたくもない


    ASってそもそもECMAScriptなんだから
    ブラウザに投げりゃよくね?
ActionScript

 flare というのがあります
 http://www.nowrap.de/flare.html




 swfバイナリ


                   frame 1 {
                     stopAllSounds();
 ソースコード              delete onMouseDown;
                     var init;
                     this.play();
                     if (init == undefined) {
ActionScript


                              逆コンパイルされたコード
                     source




       FrameAction
                                             JS Engine
世の中はそんなに甘くない
ActionScript
 傾向と対策


  thisは? → prototype.js の bind (解決)

  グローバルは? → windowに突っ込んでおく(ちょっと苦しい)

  _x とか _parent とかは? → スクリプト実行前後に設定、
 チェックする(ちょっと苦しい)
ActionScript

    ローカル変数は?

       Frame 1        Frame 2        Frame 3



         var a = 5;    trace(++a);    trace(++a);




                                6              7
ActionScript
           実行時にスクリプトを書き換え

            function() {      function() {
              var a = 5;        var a = this.__locals__[‘a’];
            }                   var a = 5;                    保存
                                this.__locals__[‘a’] = a;
                              }

toString                                                             eval
            function() {      function() {
              trace(++a);       var a = this.__locals__[‘a’];
            }                   trace(++a);                     復帰
                                this.__locals__[‘a’] = a;
                              }


                 ※ 子ムービークリップの参照などもこの方法で突っ込む
ActionScript


    ローカル変数のリストは? → 手書き (苦しい)

    その他(クロージャとか) → 全自動はきつい!




          ASとの息詰まる闘い。
今のところの戦果
To Do


   DefineButton

   ビットマップデータ

   音(できれば)
本日コミット
           よろしくお願いします
      http://www.libspark.org/svn/ruby/jsplash/



20%

Mais conteúdo relacionado

Mais procurados

【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組み【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組みdevsumi2009
 
Inside the Erlang Vm
Inside the Erlang VmInside the Erlang Vm
Inside the Erlang VmFeng Yu
 
Team_Share_090510_Must_or_May
Team_Share_090510_Must_or_MayTeam_Share_090510_Must_or_May
Team_Share_090510_Must_or_Maysodabiscuit
 
CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇Jace Ju
 
PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇Jace Ju
 
Web Refactoring
Web RefactoringWeb Refactoring
Web RefactoringJace Ju
 
Howtousenetboss
HowtousenetbossHowtousenetboss
Howtousenetbosskumee
 
イケテルRuby開発環境
イケテルRuby開発環境イケテルRuby開発環境
イケテルRuby開発環境mokada
 
Asp .Net 2.0 安全機制 Ii
Asp .Net 2.0 安全機制 IiAsp .Net 2.0 安全機制 Ii
Asp .Net 2.0 安全機制 IiChui-Wen Chiu
 
変わる時代、変わらぬ思い
変わる時代、変わらぬ思い変わる時代、変わらぬ思い
変わる時代、変わらぬ思いHiromu Shioya
 
136 Ch
136 Ch136 Ch
136 Chanjaan
 
PHP 物件導向 - 基礎觀念篇
PHP 物件導向 - 基礎觀念篇PHP 物件導向 - 基礎觀念篇
PHP 物件導向 - 基礎觀念篇Jace Ju
 
Ohp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 JfreechartOhp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 Jfreechartsesejun
 
CAPとBASEとEventually Consistent
CAPとBASEとEventually ConsistentCAPとBASEとEventually Consistent
CAPとBASEとEventually ConsistentYohei Yamamoto
 
新作業系統的蛻變
新作業系統的蛻變新作業系統的蛻變
新作業系統的蛻變jerrychiang
 
智慧型手機
智慧型手機智慧型手機
智慧型手機Kelun Yang
 
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõNamkhainyambuu Gan-Erdene
 

Mais procurados (20)

【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組み【12-D-3】 ASP.NET MVC - 概要と仕組み
【12-D-3】 ASP.NET MVC - 概要と仕組み
 
Inside the Erlang Vm
Inside the Erlang VmInside the Erlang Vm
Inside the Erlang Vm
 
Team_Share_090510_Must_or_May
Team_Share_090510_Must_or_MayTeam_Share_090510_Must_or_May
Team_Share_090510_Must_or_May
 
CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇
 
PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇
 
Web Refactoring
Web RefactoringWeb Refactoring
Web Refactoring
 
Howtousenetboss
HowtousenetbossHowtousenetboss
Howtousenetboss
 
イケテルRuby開発環境
イケテルRuby開発環境イケテルRuby開発環境
イケテルRuby開発環境
 
Asp .Net 2.0 安全機制 Ii
Asp .Net 2.0 安全機制 IiAsp .Net 2.0 安全機制 Ii
Asp .Net 2.0 安全機制 Ii
 
Pseudo Perl
Pseudo PerlPseudo Perl
Pseudo Perl
 
変わる時代、変わらぬ思い
変わる時代、変わらぬ思い変わる時代、変わらぬ思い
変わる時代、変わらぬ思い
 
136 Ch
136 Ch136 Ch
136 Ch
 
PHP 物件導向 - 基礎觀念篇
PHP 物件導向 - 基礎觀念篇PHP 物件導向 - 基礎觀念篇
PHP 物件導向 - 基礎觀念篇
 
Ohp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 JfreechartOhp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 Jfreechart
 
cblue_grails@njug5
cblue_grails@njug5cblue_grails@njug5
cblue_grails@njug5
 
CAPとBASEとEventually Consistent
CAPとBASEとEventually ConsistentCAPとBASEとEventually Consistent
CAPとBASEとEventually Consistent
 
新作業系統的蛻變
新作業系統的蛻變新作業系統的蛻變
新作業系統的蛻變
 
Yarvmi
YarvmiYarvmi
Yarvmi
 
智慧型手機
智慧型手機智慧型手機
智慧型手機
 
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
 

Mais de gyuque

第11回 HTML5とか勉強会 gyuque
第11回 HTML5とか勉強会 gyuque第11回 HTML5とか勉強会 gyuque
第11回 HTML5とか勉強会 gyuquegyuque
 
LL Tiger 2010 (LTの虎 1)
LL Tiger 2010 (LTの虎 1)LL Tiger 2010 (LTの虎 1)
LL Tiger 2010 (LTの虎 1)gyuque
 
JUI 2009 O3D Programming
JUI 2009 O3D ProgrammingJUI 2009 O3D Programming
JUI 2009 O3D Programminggyuque
 
Mozilla Party 2009 Canvas Programming
Mozilla Party 2009 Canvas ProgrammingMozilla Party 2009 Canvas Programming
Mozilla Party 2009 Canvas Programminggyuque
 
JSplash - Adobe MAX 2009
JSplash - Adobe MAX 2009JSplash - Adobe MAX 2009
JSplash - Adobe MAX 2009gyuque
 
FOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript ProgrammingFOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript Programminggyuque
 
ASCSS Nite
ASCSS NiteASCSS Nite
ASCSS Nitegyuque
 
Shibuya.abc - Gnashで遊ぼう
Shibuya.abc - Gnashで遊ぼうShibuya.abc - Gnashで遊ぼう
Shibuya.abc - Gnashで遊ぼうgyuque
 

Mais de gyuque (8)

第11回 HTML5とか勉強会 gyuque
第11回 HTML5とか勉強会 gyuque第11回 HTML5とか勉強会 gyuque
第11回 HTML5とか勉強会 gyuque
 
LL Tiger 2010 (LTの虎 1)
LL Tiger 2010 (LTの虎 1)LL Tiger 2010 (LTの虎 1)
LL Tiger 2010 (LTの虎 1)
 
JUI 2009 O3D Programming
JUI 2009 O3D ProgrammingJUI 2009 O3D Programming
JUI 2009 O3D Programming
 
Mozilla Party 2009 Canvas Programming
Mozilla Party 2009 Canvas ProgrammingMozilla Party 2009 Canvas Programming
Mozilla Party 2009 Canvas Programming
 
JSplash - Adobe MAX 2009
JSplash - Adobe MAX 2009JSplash - Adobe MAX 2009
JSplash - Adobe MAX 2009
 
FOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript ProgrammingFOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript Programming
 
ASCSS Nite
ASCSS NiteASCSS Nite
ASCSS Nite
 
Shibuya.abc - Gnashで遊ぼう
Shibuya.abc - Gnashで遊ぼうShibuya.abc - Gnashで遊ぼう
Shibuya.abc - Gnashで遊ぼう
 

JSplash swf to javascript converter(2008/9/30)

  • 1. JSplash SWF to Javascript Converter gyuque
  • 2. 最近のブラウザは爆速らしい Google V8 benchmark (Score) 700 600 500 400 300 200 100 0 IE7 Chrome Fx3.1 Safari http://japan.cnet.com/blog/kichi/2008/09/23/entry_27014819/
  • 3. せっかくだから無駄遣いしよう 昔から、パワーの無駄遣いと言えばゲーム スプライトがないPC-66でスペハリ (変態) 8ビット機で3Dポリゴン (変態)
  • 4. 目標 Flashのゲームを どうにかして Javascriptで動かす
  • 5. 手順 どうにかして読み込む どうにかして描画する どうにかしてASを動かす
  • 6. 読み込み swfmill というのがあります http://swfmill.org/ swfバイナリ <?xml version=quot;1.0quot;?> <swf version=quot;7quot; compressed=quot;1quot;> <Header framerate=quot;30quot; frames=quot;18quot;> XML <size> <Rectangle left=quot;0quot; right=quot;14000quot; top=quot;0quot; bottom=quot;8000quot;/> </size> <tags> <SetBackgroundColor>
  • 7. 読み込み JS 重! JSplash.load_swf( { header: {frameRate: 40, frames: 18, width: 14000, height: 8000}, taglist: [ {tag:JSplash.tSetBackgroundColor, rgb:'dd dddd'} /*- 0 -*/, {tag:null}, {tag:null}, {tag:JSplash.tDoAction}, 軽い+パース不要
  • 9. ActionScript AVMを実装する? 考えたくもない ASってそもそもECMAScriptなんだから ブラウザに投げりゃよくね?
  • 10. ActionScript flare というのがあります http://www.nowrap.de/flare.html swfバイナリ frame 1 { stopAllSounds(); ソースコード delete onMouseDown; var init; this.play(); if (init == undefined) {
  • 11. ActionScript 逆コンパイルされたコード source FrameAction JS Engine
  • 13. ActionScript 傾向と対策 thisは? → prototype.js の bind (解決) グローバルは? → windowに突っ込んでおく(ちょっと苦しい) _x とか _parent とかは? → スクリプト実行前後に設定、 チェックする(ちょっと苦しい)
  • 14. ActionScript ローカル変数は? Frame 1 Frame 2 Frame 3 var a = 5; trace(++a); trace(++a); 6 7
  • 15. ActionScript 実行時にスクリプトを書き換え function() { function() { var a = 5; var a = this.__locals__[‘a’]; } var a = 5; 保存 this.__locals__[‘a’] = a; } toString eval function() { function() { trace(++a); var a = this.__locals__[‘a’]; } trace(++a); 復帰 this.__locals__[‘a’] = a; } ※ 子ムービークリップの参照などもこの方法で突っ込む
  • 16. ActionScript ローカル変数のリストは? → 手書き (苦しい) その他(クロージャとか) → 全自動はきつい! ASとの息詰まる闘い。
  • 18. To Do DefineButton ビットマップデータ 音(できれば)
  • 19. 本日コミット よろしくお願いします http://www.libspark.org/svn/ruby/jsplash/ 20%