让AS3编译时间缩短为0的方法

每次一改代码AS3的编译时间都很长(10几秒吧)。估计是在做一些条件检验的活。 可以在as3里调用Lua脚本(需用到luaAlchemy.LuaAlchemy库),Lua是纯执行期脚本,所以编译时间缩为0。 同时还有两个好处,1, 如果的后台也是用Lua编写, 则前台和后台的代码一致(招人,维护都更方便)。2, Lua做数据交换的脚本相当灵活(比Json还灵活,因为Json还要去区分是数组还是元素,Lua则两者为同一体).

注: Lua向as3传中文时可能有乱码的问题, 把Lua文件的编码方式改下即可解决。方法: 用SciTE新建一个空白文件,在页头保存一行代码: code.page=65001. 再点保存即可。

 

一个想法是:前台用as3, 应用逻辑用lua, 后台框架用C++ 

	import luaAlchemy.LuaAlchemy;
	import luaAlchemy.LuaAssets;
	
	import ui.controls.Alert;

	public class LuaEngine
	{
		//LUA
		public static const SC_CMD_LUA_MSG : int					= 1;
		
		public var G_lua:LuaAlchemy = null;
		public var G_AS3_Buf:Array = null;
		
		public function LuaEngine()
		{
			G_lua = new LuaAlchemy();
			G_AS3_Buf = new Array();
			G_lua.init();
			G_lua.setGlobal("AS3", this);
		}
		
		/**
		 * 单例对象
		 * */
		private static var _instance : LuaEngine;
		
		/**
		 * 获取单例对象
		 * */
		public static function getInstance() : LuaEngine
		{
			if( null == _instance )
			{
				_instance = new LuaEngine();
			}
			return _instance;
		}
		
		/**
		 * 执行Lua函数
		 * */
		public function RunLuaFun( funName : String, ... params) : void
		{
			var str:String = funName + "()";
			var separator:String = "";
			if(params != null && params.length > 0)
			{
				var key:int = 0;
				for each(var param : * in params)
				{
					API_SetAS3Par(++key, param);
				}
			}
			LuaEngine.getInstance().G_lua.doString(str);
		}
		
		/*------------------------- CallBack -------------------------*/
		/**
		 * 函数消息处理
		 * */
		public function onGameMessage(protocalId:int, buffer:ByteBuffer):void
		{
			if( protocalId == SC_CMD_LUA_MSG )
			{
				RunLuaFun("Client_onGameMessage", buffer.readString());
			}
		}
		
		/**
		 * 当客户端点击NPC时
		 * */
		public function onClickNPC( npc:int ) : void
		{
			RunLuaFun("Client_onClickNPC", npc);
		}
		
		/**
		* 当点击NPC面板选项消息
		* */
		public function onClickDlgItem( item:DialogCommandData ) : void
		{
			RunLuaFun("Client_onClickDlgItem", item);
		}
		
		/*------------------------- API -------------------------*/
		/**
		 * AS3类型转成LUA类型
		 * */
		public function API_AS3_TO_Lua( obj:Object ):void
		{
			if( null == obj)
			{
				G_lua.doString("API_AS3_TO_Lua_Type_BUF = nil");
			}
			else if(obj is int)
			{
				G_lua.doString("API_AS3_TO_Lua_Type_BUF = " + obj);
			}
			else if(obj is Boolean)
			{
				if( Boolean )
					G_lua.doString("API_AS3_TO_Lua_Type_BUF = true");
				else
					G_lua.doString("API_AS3_TO_Lua_Type_BUF = false");
			}
			else if(obj is String)
			{
				var par:String = obj.split("\"").join("\\\"");
				G_lua.doString("API_AS3_TO_Lua_Type_BUF = \"" + par + "\"");
			}
			else if(obj is Number)
			{
				G_lua.doString("API_AS3_TO_Lua_Type_BUF = " + obj);
			}
			else
			{
				G_lua.setGlobal("API_AS3_TO_Lua_Type_BUF", obj);
			}
		}
		
		/**
		 * 填充临时数据
		 * */
		public function API_SetAS3Par( key:int, data:Object ):void
		{
			G_AS3_Buf[key] = data;
		}
		
		/**
		 * 获得临时数据
		 * */
		public function API_GetAS3Par( key:int ):Object
		{
			var obj:Object = G_AS3_Buf[key]
			return obj;
		}
		
		/**
		 * 向服务器发信息
		 * */
		public function API_SendCmd( _buf:String ) : void
		{
			var code_buf:Array = new Array();
			code_buf[0] = new Byte( GameMessage.CMD_ROOT_THING );
			code_buf[1] = new Byte( GameMessage.ROOTTHING_CS_MAIN_INTERACT );
			code_buf[2] = "OnInteractions";
			code_buf[3] = _buf;
			NetManager.getInstance().sendMsg( code_buf );
		}
		
		/**
		 * trace信息
		 * */
		public function API_Trace( str:String ):void{	trace(str); }
		
		/**
		 * 载入文件
		 * */
		public function API_LoadFile( str:String ):void
		{
			var str:String = LoadLuaFile.getInstance().getFileBuf(str);
			if( null != str )
			{
				G_lua.doString(str);
			}
		}
		
		/**
		 * 获得对话面板
		 * */
		public function API_GetNPDDlg():DialogView
		{
			//对话面板
			UiManager.addWidget(UiManager.WIDGET_DIALOG);
			var dialogView : DialogView = UiManager.getWidget(UiManager.WIDGET_DIALOG) as DialogView;
			if(dialogView && !dialogView.isHide)
			{
				return dialogView;
			}
			return null;
		}
		
		private function API_TalkMsg( str:String ) : void
		{
			Alert.show(str, "" ,null ,Alert.YES | Alert.NO ,null ,null);
		}
	}


 

-- ------------------------------------
-- 载入文件
-- ------------------------------------
function Lua_AS3ToLua( _obj )
	AS3.API_AS3_TO_Lua(_obj)
	return API_AS3_TO_Lua_Type_BUF
end

function Lua_GetAS3Par( _key )
	local obj = AS3.API_GetAS3Par(_key)
	return Lua_AS3ToLua(obj)
end




-- ------------------------------------
-- 载入文件
-- ------------------------------------
function Lua_LoadFile( _file_name )
	local ret = AS3.API_LoadFile(_file_name)
	--AS3.API_Trace("载入" .. _file_name .. ", 结果" .. ret)
end

-- ------------------------------------
-- 载入LUA文件
-- ------------------------------------
Lua_LoadFile("LUA_Util.lua")
Lua_LoadFile("LUA_Message.lua")
Lua_LoadFile("LUA_CallBack.lua")


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值