看板 Flash 關於我們 聯絡資訊
有玩過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)
aquarianboy:好東西啊! 04/05 18:12
Jerrynet:推啊! 04/05 20:17
Jerrynet:補上AS3版的網址 http://0rz.tw/imL7Z 04/05 20:28
icedesign:大推 04/05 21:52
cjcat2266:哎呀呀,抱歉哪,我原本是要po AS3版本的,結果忘記XD 04/05 22:28
cjcat2266:趕快來補上 :p 04/05 22:28
※ 編輯: cjcat2266 來自: 61.228.86.152 (04/05 22:29)