作者cjcat2266 (CJ Cat)
看板Flash
标题[情报] BSIE - AS3的scripting engine
时间Sun Apr 5 12:24:19 2009
有玩过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)
1F:推 aquarianboy:好东西啊! 04/05 18:12
2F:推 Jerrynet:推啊! 04/05 20:17
4F:推 icedesign:大推 04/05 21:52
5F:→ cjcat2266:哎呀呀,抱歉哪,我原本是要po AS3版本的,结果忘记XD 04/05 22:28
6F:→ cjcat2266:赶快来补上 :p 04/05 22:28
※ 编辑: cjcat2266 来自: 61.228.86.152 (04/05 22:29)