Flash调用Lua脚本: 一
这里有一个具体的例子:http://rc.qzone.qq.com/100641772
1)首先需要这个 http://code.google.com/p/lua-alchemy/
2)看一个简单的应用,在这个example里面,Lua文件是作为字符串写到里面的。
1 import flash.display.Sprite; 2 import flash.events.Event; 3 import flash.events.MouseEvent; 4 import flash.utils.ByteArray; 5 import luaAlchemy.LuaAlchemy; 6 import luaAlchemy.LuaAssets; 7 import fl.controls.Button; 8 9 /** 10 * ... 11 * @author 蜂窝煤 12 */ 13 14 public class Main extends Sprite 15 { 16 private var btn4:Button; 17 18 public function Main():void 19 { 20 init(); 21 } 22 23 private function init(e:Event = null):void 24 { 25 var luaString:String = "local btn = as3.class.fl.controls.Button.new()\nthis.addChild(btn)\nbtn.width=200"; 26 var lua:LuaAlchemy = new LuaAlchemy(); 27 lua.setGlobal("this", this); 28 lua.doString(luaString); 29 } 30 }
注意一下16行,其实这行逻辑上没有起任何作用,但如果没有的话,就会报错。25行里面lua语句中的\n,去掉也是一样的。
Lua error:
builtin://lua_alchemy/as3/sugar.lua:227: invalid package::ClassName: 'fl.controls::Button'
stack traceback:
[C]: in function 'old_fn'
builtin://lua_alchemy/as3/sugar.lua:227: in function 'new2'
builtin://lua_alchemy/as3/sugar.lua:341: in function 'new'
luaDoString:1: in main chunk
实际上,var btn:Button这句话写哪里都可以,但是必须存在。
感谢老王提供了另外一个版本,在这里面,Lua文件作为资源嵌入。
1 import com.ftygame.jerrywong.bitmapui.JWTLFText; 2 3 import flash.display.Sprite; 4 import flash.events.Event; 5 import flash.utils.ByteArray; 6 7 import luaAlchemy.LuaAlchemy; 8 9 public class TestLuaAlchemy extends Sprite 10 { 11 private var myLuaAlchemy:LuaAlchemy; 12 [Embed(source="../assets/HelloWorld.lua", mimeType="application/octet-stream")] 13 private var LuaClass:Class; 14 15 public function TestLuaAlchemy() 16 { 17 if(stage) initializeApplication(); 18 else addEventListener(Event.ADDED_TO_STAGE, initializeApplication); 19 } 20 private function initializeApplication(e:Event=null):void 21 { 22 removeEventListener(Event.ADDED_TO_STAGE,initializeApplication); 23 importClass4Lua(); 24 var luaAsset:ByteArray = new LuaClass() as ByteArray; 25 var luaString:String = luaAsset.readUTFBytes(luaAsset.bytesAvailable); 26 var lua:LuaAlchemy = new LuaAlchemy(); 27 lua.setGlobal("this",this); 28 var res:Array = lua.doString(luaString); 29 30 } 31 private function importClass4Lua():void 32 { 33 var label:JWTLFText; 34 } 35 36 } 37 }
这里面学习了一个读取文件的技巧。
又写了一个异步读取Lua文件的版本。
1 public class Main extends Sprite 2 { 3 public function Main():void 4 { 5 6 var loader:URLLoader = new URLLoader(); 7 var request:URLRequest = new URLRequest("helloworld.lua"); 8 loader.load(request); 9 loader.dataFormat = URLLoaderDataFormat.TEXT; 10 loader.addEventListener(Event.COMPLETE, function(e:Event):void 11 { 12 DoLua(loader.data); 13 }); 14 } 15 16 private function DoLua(_luaSt:String):void 17 { 18 var btn4:Button; 19 var lua:LuaAlchemy = new LuaAlchemy(); 20 lua.setGlobal("this", this); 21 lua.doString(_luaSt); 22 } 23 }
看一眼,效果图,一个简单的按钮被添加了。
在下一节里,我们深入讲讲这个专题,主要针对一些As3toLualowevel api Flash 调用lua脚本 二