• 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     }

    来简单展现一下效果:

     
  • 相关阅读:
    innerHTML和innerText
    Function 构造器及其对象、方法
    构造函数
    jquery 获取及设置input各种类型的值
    在浏览器中输入URL并回车后都发生了什么?
    :after和:before的作用及使用方法
    使用JS监听键盘按下事件(keydown event)
    Javascript模块化编程(三):require.js的用法
    Javascript模块化编程(二):AMD规范
    Javascript模块化编程(一):模块的写法
  • 原文地址:https://www.cnblogs.com/GameCode/p/2603644.html
Copyright © 2020-2023  润新知