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腳本 二


免責聲明!

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



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