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