Flash调用Lua脚本: 二
这里有一个具体的例子:http://rc.qzone.qq.com/100641772
在这一节里面,进一步学习使用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") end local lab1 = as3.class.fl.controls.Label.new() lab1.text = "This is a lua alchemy demo." lab1.width = 200 this.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 = st1 local 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的方法了。