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

posted @ 2012-07-17 23:37  向恺然  阅读(4745)  评论(1编辑  收藏  举报

我必须说的是:我崇尚开源,但鄙视剽窃。本博客所有引用的图片,文章,和代码,均只作为研究学习使用,不作为商业应用。如果我无意中冒犯了您,请发消息留言,我将立即删除。