[情報] BSIE - AS3的scripting engine
有玩過PC game的人多多少少看過所謂的"console"吧
像很多Valve出的遊戲按下~就會跳出一個可以輸入指令的console視窗
這種及時輸入code及時編譯的引擎叫做scripting engine
像是Python, MATLAB語言都屬於scripting language
LUA是一個很有名的scripting engine
被Lucas Arts拿來做星際大戰遊戲系列
目前有人用Alchemy將其轉換成AS3可以用的library,不過還在0.2beta階段
BISE是我最近發現的一個輕量級AS2 scripting engine
(BISE = BeInteractive Scripting Engine)
是一位叫做Yoshihiro Shindo的日本人寫的
他的blog在這裡 http://be-interactive.org/
Sean Givan將其翻譯成AS3版本,也就是我最近在玩的版本
AS3版本網址在這裡 http://0rz.tw/imL7Z
Script engine的好處:
(1)可以讓使用者直接從console輸入code立即編譯
不需要為了測試、修改某個小大方而重新把主程式編譯一次
(2)寫好的code存成文字擋,可以要執行的時候再載入
BISE的用法也很簡單
不外乎用到Scanner, Parser, VirtualMachine三個class而已
import scripting.*;
import idv.cjcat.display.shapes.*;
var code:String = "trace(123);";
var s:Scanner = new Scanner(code);
var p:Parser = new Parser(s);
var vm:VirtualMachine = new VirtualMachine();
vm.getGlobalObject().trace = trace;
vm.setByteCode(p.parse());
vm.execute();
//那行 "trace(123);" 就會導致Flash Player印出123
BISE的變數沒有type,使用一個var即可
var i = 123;
BISE可以利用VirtualMachine.getGlobalObject()來讓其跟一些function和class做連結
vm.getGlobalObject().trace = trace;
↑就是定義BISE script裡面的trace等於Flash的trace
BISE沒有new operator,但是我們可以用函式的方式來達到同樣的效果
import scripting.*;
import flash.display.*;
//這些是BISE script
var code:String = "";
code += "var circle = create(Shape);";
code += "circle.graphics.lineStyle(0);";
code += "circle.graphics.drawCircle(50, 50, 50);";
code += "root.addChild(circle);";
var s:Scanner = new Scanner(code);
var p:Parser = new Parser(s);
var vm:VirtualMachine = new VirtualMachine();
//跟一些function, object, class做連結
vm.getGlobalObject().trace = trace;
vm.getGlobalObject().root = root;
vm.getGlobalObject().Shape = Shape;
//利用此function來達到new的效果
vm.getGlobalObject().create = create;
function create(c:Class):* {
return new c();
}
vm.setByteCode(p.parse());
vm.execute();
夠好玩吧?
有興趣的人可以試試用BISE來操縱自己寫的小遊戲看看 :)
--
CJ Cat = Croa'J Cat = Cockroach Cat = 西街凱特 = 蜚蠊貓 = 蟑螂貓
Blog http://cjcat.blogspot.com
Gallery http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop - 阿多比閃光(Adobe Flash)研討區
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.82.66
※ 編輯: cjcat2266 來自: 61.228.82.66 (04/05 14:42)
推
04/05 18:12, , 1F
04/05 18:12, 1F
推
04/05 20:17, , 2F
04/05 20:17, 2F
→
04/05 20:28, , 3F
04/05 20:28, 3F
推
04/05 21:52, , 4F
04/05 21:52, 4F
→
04/05 22:28, , 5F
04/05 22:28, 5F
→
04/05 22:28, , 6F
04/05 22:28, 6F
※ 編輯: cjcat2266 來自: 61.228.86.152 (04/05 22:29)
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):