zoukankan      html  css  js  c++  java
  • 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")
    end
    
    
    local lab1 = as3.class.fl.controls.Label.new()
    lab1.text = "This is a lua alchemy demo."
    lab1.width = 200
    this.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 = st1
    
    local 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的方法了。

  • 相关阅读:
    JAVA基础 (三)反射 深入解析反射机制
    JAVA基础 (二)反射 深入解析反射机制
    JAVA注解引发的思考
    深入理解jsonp解决跨域访问
    设计模式之简单工厂模式
    设计模式之接口隔离原则
    设计模式之迪米特法则
    设计模式之依赖倒置原则
    设计模式之里氏替换原则
    设计模式之开放封闭原则
  • 原文地址:https://www.cnblogs.com/GameCode/p/2600417.html
Copyright © 2011-2022 走看看