• Flash调用Lua脚本: 一


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

    1)首需要这个 http://code.google.com/p/lua-alchemy/

    2)看一个简单的应用,在这个example里面,Lua文件是作为字符串写到里面的。

     1 import flash.display.Sprite;
     2     import flash.events.Event;
     3     import flash.events.MouseEvent;
     4     import flash.utils.ByteArray;
     5     import  luaAlchemy.LuaAlchemy;
     6     import luaAlchemy.LuaAssets;
     7     import fl.controls.Button;
     8     
     9     /**
    10      * ...
    11      * @author 蜂窝煤
    12      */
    13     
    14     public class Main extends Sprite 
    15     {    
    16         private var btn4:Button;
    17         
    18         public function Main():void 
    19         {
    20             init();            
    21         }
    22         
    23         private function init(e:Event = null):void 
    24         {
    25             var luaString:String = "local btn = as3.class.fl.controls.Button.new()\nthis.addChild(btn)\nbtn.width=200";
    26             var lua:LuaAlchemy = new LuaAlchemy();
    27             lua.setGlobal("this", this);
    28             lua.doString(luaString);
    29         }        
    30     }

    注意一下16行,其实这行逻辑上没有起任何作用,但如果没有的话,就会报错。25行里面lua语句中的\n,去掉也是一样的。

    Lua error:
    builtin://lua_alchemy/as3/sugar.lua:227: invalid package::ClassName: 'fl.controls::Button'
    stack traceback:
     [C]: in function 'old_fn'
     builtin://lua_alchemy/as3/sugar.lua:227: in function 'new2'
     builtin://lua_alchemy/as3/sugar.lua:341: in function 'new'
     luaDoString:1: in main chunk

    实际上,var btn:Button这句话写哪里都可以,但是必须存在。

    感谢老王提供了另外一个版本,在这里面,Lua文件作为资源嵌入。

     1 import com.ftygame.jerrywong.bitmapui.JWTLFText;
     2     
     3     import flash.display.Sprite;
     4     import flash.events.Event;
     5     import flash.utils.ByteArray;
     6     
     7     import luaAlchemy.LuaAlchemy;
     8     
     9     public class TestLuaAlchemy extends Sprite
    10     {
    11         private var myLuaAlchemy:LuaAlchemy;
    12         [Embed(source="../assets/HelloWorld.lua", mimeType="application/octet-stream")]
    13         private var LuaClass:Class;
    14         
    15         public function TestLuaAlchemy()
    16         {
    17             if(stage) initializeApplication();
    18             else addEventListener(Event.ADDED_TO_STAGE, initializeApplication);
    19         }
    20         private function initializeApplication(e:Event=null):void
    21         {
    22             removeEventListener(Event.ADDED_TO_STAGE,initializeApplication);
    23             importClass4Lua();
    24             var luaAsset:ByteArray = new LuaClass() as ByteArray;
    25             var luaString:String = luaAsset.readUTFBytes(luaAsset.bytesAvailable);
    26             var lua:LuaAlchemy = new LuaAlchemy();
    27             lua.setGlobal("this",this);
    28             var res:Array = lua.doString(luaString);
    29             
    30         }
    31         private function importClass4Lua():void
    32         {
    33             var label:JWTLFText;
    34         }
    35         
    36     }
    37 }


    这里面学习了一个读取文件的技巧。

    又写了一个异步读取Lua文件的版本。

     1 public class Main extends Sprite 
     2     {    
     3         public function Main():void 
     4         {
     5             
     6             var loader:URLLoader = new URLLoader();    
     7             var request:URLRequest = new URLRequest("helloworld.lua");
     8             loader.load(request);
     9             loader.dataFormat = URLLoaderDataFormat.TEXT;
    10             loader.addEventListener(Event.COMPLETE, function(e:Event):void
    11             {
    12                 DoLua(loader.data);
    13             });
    14         }
    15         
    16         private function DoLua(_luaSt:String):void 
    17         {
    18             var btn4:Button;
    19             var lua:LuaAlchemy = new LuaAlchemy();
    20             lua.setGlobal("this", this);
    21             lua.doString(_luaSt);
    22         }        
    23     }

     看一眼,效果图,一个简单的按钮被添加了。

    在下一节里,我们深入讲讲这个专题,主要针对一些As3toLualowevel api        Flash 调用lua脚本 二

  • 相关阅读:
    UVa10050 Hartals
    UVa540 Team Queue
    UVa 11234 Expressions (二叉树重建&由叶往根的层次遍历)
    stl lower_bound upper_bound binary_search equal_range
    【windows】使用键盘代替鼠标的快捷键
    【Linux】xshell连接中断后就无法连接虚拟机中的Linux
    【Linux命令】ls命令
    【DB2】NULLS LAST与NULLS FIRST
    【PPT】PPT倒计时动画的制作方法 5.4.3.2.1...
    【Datastage】函数大全
  • 原文地址:https://www.cnblogs.com/GameCode/p/2596606.html
Copyright © 2020-2023  润新知