读书人

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

发布时间: 2012-11-09 10:18:48 作者: rapoo

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

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

读书人网 >编程

热点推荐