• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Flash调用Lua脚本:三

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这里有一个具体的例子: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     }

来简单展现一下效果:

 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
luaIDEforcocos2d-xdevelopment发布时间:2022-07-22
下一篇:
windowslua多线程线程同步发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap