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

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

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

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

这里有一个具体的例子:http://rc.qzone.qq.com/100641772     

这次我们建一个累加的Demo。在前面,我们已经了解了Lua和AS3的通信,但还有很多,比如在AS3里面读取Lua方法的返回值,这时候返回的是一个第一个元素为布尔值的Array。但我却不知道怎么样从这个Array中读取需要的结果。如果有哪个朋友了解这个,希望能够解答一下。

在这里面,建立了一个类作为Lua和AS3之间数据通信的中介,

 1 package Middle 2 { 3     public class MiddleData 4     { 5         public static var DataArray:Array = new Array(); 6         public function MiddleData() 7         { 8         } 9         10         public function Add(_n:int):void11         {12             DataArray.push(_n);13         }14     }15 }

这个类实际上没有做什么事情,只是有一个静态属性作为数据存储。

    在Lua文件中,我们做了3件事情,1)建立一个累加的函数 2)建立上面AS3里面建立的数据中介类 3)调用这个类的Add方法,把Lua的累加函数产生的结果放到这个数据中介类的静态属性里。

 1 function fact(num) 2    if(num <= 1) then  3       return 1 4    else  5       return num + fact(num -1)    6    end 7 end 8  9 local v = as3.class.Middle.MiddleData.new()10 11 function exe_fact(num)12   --as3.trace(fact(num))13   as3.call(v,"Add",fact(num))14 end

再接下来的事情,就相对容易了,建立AS3的项目,在这里面调用Lua的方法,然后调用数据中介类,从里面取得Lua方法的返回值。

 1     public class StudyLua01 extends Sprite 2     { 3         public var IntArray:Vector.<int> = new Vector.<int>();         4         private var txtInput:TextInput; 5         private var btn:Button; 6         private var lbl:Label; 7         public function StudyLua01() 8         { 9             InitPage();10             LoadLua("../lualib/lua1.lua");11         }12         13         private function InitPage():void14         {15             txtInput = new TextInput();16             txtInput.move(10, 10);17             addChild(txtInput);18             btn = new Button();19             addChild(btn);20             btn.move(180, 10);21             lbl = new Label();22             lbl.move(380, 10);23             lbl.text = "0";24             addChild(lbl);25         }26         27         private function LoadLua(_url:String):void28         {29             var urlLoader:URLLoader = new URLLoader();30             urlLoader.dataFormat = URLLoaderDataFormat.TEXT;31             var urlRequest:URLRequest = new URLRequest(_url);32             urlLoader.addEventListener(Event.COMPLETE, function(e:Event):void{33                 ExecuteLua(urlLoader.data);34             });35             urlLoader.load(urlRequest);36         }37         38         private function ExecuteLua(_luaSt:String):void39         {40             var lua:LuaAlchemy = new LuaAlchemy();41             lua.setGlobal("this", this);42             lua.doString(_luaSt);43             44             btn.addEventListener(MouseEvent.CLICK, function(e:Event):void45             {46                 var ar:Array = lua.doString("exe_fact(" + txtInput.text + ")");    47                 var result:int = MiddleData.DataArray.pop();48                 lbl.text = result.toString();                49             });50         }51     }

热点排行