BeInteractive!

JavaScriptやActionScriptなど、ECMAScript系のスクリプトには、evalという、引数の文字列をスクリプトとして実行するメソッドがあります。・・・あるはずなんですが、ActionScriptではevalはマトモに動きません。

というわけで、この辺でも書いた、ActionScript上で動作するスクリプトエンジンを作りました。やっと完成した・・・。時間かかった・・・。

動作サンプルはこれです。基本的に文法はECMA-262 3rd Editionにのっとってます。ActionScript1的な感じ。

独自拡張として、スクリプト中に

suspend;

と書くと、一旦Flash側に制御が戻るようになっています。そして、Flash側が再びスクリプトを実行したときに、中断したポイントから再開されます。(マイクロスレッド)

上のサンプルでは、Flash側に

this.onEnterFrame = funciton () {
    virtualMachine.execute();
}

と書いているので(少し略してますが)、スクリプトを

loop {
    trace('Hello');
    suspend;
}

と書けば(loopは無限ループ構文)、毎フレームHelloが出力されることになります。

とりあえず、体が休息を求めているので詳しいことはまた今度書きます。それまで上のサンプルを弄って待っててください(笑

出来たばっかりでごちゃごちゃしてますけどコードも置いておきますので興味ある人はどうぞ。

// コード
var code:String = [
"loop {",
"  trace('Hello');",
"  suspend;",
"}"
].join("\n");

// コンパイル
var parser:IParser  = new Parser(new Scanner(code));
var vm:VirtualMachine = new VirtualMachine();
vm.setByteCode(parser.parse());

// trace関数のエクスポート
vm.getGlobal().trace = trace;

// 実行
this.onEnterFrame = function () {
    vm.execute();
}

みたいな感じで実行できます。

この記事へのトラックバック

payday loan toronto payday loan in toronto
Here <a href=http://groups.google.com/group/dale6781/web/100-loan-online-payday>100 loan online payday</a> <a href=http://groups.google.com/group/dale6781/web/fast-loan-online-payday>fast loan online ...
loan until payday
For example <a href=http://groups.google.at/group/birnbaum1428/web/klingeltne-fr-das-handy>klingeltne fr das handy</a> <a href=http://groups.google.at/group/birnbaum1428/web/klingeltne-fr-samsung>klin...

TrackBack URL:

http://www.be-interactive.org/trackback.php?id=7

この記事へのコメント

コメントはありません。

コメント書き込み:

カテゴリ

タグ

アーカイブ