首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

在线游戏脚本编程 - Flash调用Lua脚本

2012-11-09 
在线游戏脚本编程 --- Flash调用Lua脚本看一下效果:大家看到的是一个普通 的游戏界面。接下来看看接下来看

在线游戏脚本编程 --- Flash调用Lua脚本

看一下效果:

在线游戏脚本编程 - Flash调用Lua脚本

大家看到的是一个普通 的游戏界面。

接下来看看

在线游戏脚本编程 - 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     }

这是第一个简单的效果。当然要创建上面那样一个平台还需要做更多的事情,请关注后面的教程文章。

热点排行