首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

在线游戏脚本编程 - Flash调用Lua脚本 2

2012-11-19 
在线游戏脚本编程 --- Flash调用Lua脚本二这里有一个具体的例子:http://rc.qzone.qq.com/100641772在这一

在线游戏脚本编程 --- 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")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的方法了。

热点排行