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):void
11         {
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():void
14         {
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):void
28         {
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):void
39         {
40             var lua:LuaAlchemy = new LuaAlchemy();
41             lua.setGlobal("this", this);
42             lua.doString(_luaSt);
43             
44             btn.addEventListener(MouseEvent.CLICK, function(e:Event):void
45             {
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     }

來簡單展現一下效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM