这里有一个具体的例子:
在这一节里面,进一步学习使用LuaAlchemy。
和上一节一样,首先建立一个AS3项目.
public class LowevelDemo1 extends Sprite { public function LowevelDemo1() { InitPage(); LoadLua("../luaassets/lowevel.lua"); } private function InitPage():void { var label:Label; var btn:Button = new Button(); btn.move(100, 100); addChild(btn); var c:MyClass; } private function LoadLua(_url:String):void { var urlLoader:URLLoader = new URLLoader(); urlLoader.dataFormat = URLLoaderDataFormat.TEXT; var urlRequest:URLRequest = new URLRequest(_url); urlLoader.addEventListener(Event.COMPLETE, function(e:Event):void{ ExecuteLua(urlLoader.data); }); urlLoader.load(urlRequest); } private function ExecuteLua(_luaSt:String):void { var lua:LuaAlchemy = new LuaAlchemy(); lua.setGlobal("this", this); lua.doString(_luaSt); } }
这是一个主文件,在这个文件里我们载入了一个Lua脚本。在页面上放了一个按钮。
下面让我们看看Lua脚本。
-- LuaAlchemy -- http://code.google.com/p/lua-alchemy/wiki/LuaToAS3LowLevel--[[ 进一步学习LuaAlchemy,lua脚本的学习]]--as3.trace("Lua Demo")--as3.class.fl.controls.Button.new()-- btn = as3.new("fl.controls::Button") 这个写法总是出错function luamethod() as3.trace("ok")endlocal lab1 = as3.class.fl.controls.Label.new()lab1.text = "This is a lua alchemy demo."lab1.width = 200this.addChild(lab1)lab1.move(10,10)local st1 = as3.new("String","Hello World!")local v,n = as3.tolua(st1,40)as3.trace(type(v))as3.trace(type(n))as3.trace(type(st1))local m = as3.toas3(luamethond)as3.trace(m)as3.trace(luamethond)lab1.text = st1local m1,m2 = as3.toas3(45,function() local m = 100 end)as3.trace(type(m1))as3.trace(type(m2))local m3 = as3.new("Array")m3[0] = "A"m3[1] = "b"local m4 = as3.get(m3,"length")as3.trace(type(m4))as3.set(lab1,"text","Change by lua")as3.trace(as3.type(m3))local customClass = as3.class.CustomPack.MyClass.new()as3.trace(as3.type(customClass))as3.call(customClass.c1,"m1")local c5 = as3.get(customClass,"p1")local c6 = as3.tolua(c5)as3.trace(c5)as3.trace(c6)
在脚本里面看到了MyClass这个类。
package CustomPack{ public class MyClass { public var p1:int = 100; public var c1:MyClass2 = new MyClass2(); public function MyClass() { } public function HelloMethod(_n:int):void { trace((p1*_n)); } }}
package CustomPack{ public class MyClass2 { public var p1:int = 33; public function MyClass2() { } public function m1():void { trace("hello,m1"); } }}
补充一点,如果想在AS文件中调用Lua文件的函数也很简单,为按钮添加下面的事件代码就可以了。
,btn2.addEventListener(MouseEvent.CLICK, function(e:Event):void { var result:Array = lua.doString("TempMethod()"); });
现在,我们不但可以从Lua访问AS里面的方法,而且可以从AS里面访问Lua的方法了。