您的位置:首页 > 编程语言 > Lua

项目记录20-- 原来c#框架mediator改lua--01

2016-02-21 10:50 609 查看
项目记录-- 原来c#框架mediator改lua--01

最近没什么时间,公司项目就一直自己一个人抗着,下个星期就可以交付了,不是说项目有多难而是自己一个人说没压力那是骗人的。也算是过把独立开发的影了,这三个月的辛苦终于看到头了。希望真能把当时的承诺兑现吧,把团队建起来,不要再搞独立开发了,我希望的是稳定的开发。这都是题外话。

很久没写记录了,最近考虑把之前搭建的c#版框架改成lua,以后就lua开发。回想起来真奇怪,以前做quick-cocos2dx的时候用lua,转到了unity又回到这条路上了,难道真和lua这么有缘吗,奇妙。

ulua群里面的大神们都用purMVC这个框架,确实对unity这个脚本语言开发来说是很好,但是purMVC属于那种超强解耦的框架,学习成本还是需要的新人来说有点难接受,而且命令跳来跳去个人只是个人不怎么喜欢,但是里面的思想还是可以接受的。在写c#框架时候参考的就是purMVC,只是抽取了里面的Mediator和Module.

之前的c#框架:

项目记录14--框架年底总结和协议工具分享,UGUI图集管理
http://www.tudou.com/programs/view/dgN9kjzQODw/ 密码:xing

要用lua开发首先要知道几个小东西:

1.setmetatable 元表

2.__index 这个小东西和setmetable一起使用威力实在强大。

3.就是lua里面的最强大武器table,使用table时候要注意它的下标从1开始,习惯c#,c++的真要小心,它强大只有用过才知道。

4.lua里面弱化了类型这说法,都可以使用local,注意local声明的都是本地的。

5.“.”和“:”这两个真要搞清楚,特别要注意self使用。

....

tolua:

1.lua脚本不要随意改变放脚本的文件夹,不信试试,我之前一直require找不到,呵呵了。

2.tolua里面的luaState默认只是开一个,最好就做个luaManager.cs统一管理。

3.在开发时候全部加载lua脚本,这个要看自己怎么实现了。还有就是开发时期加载的是dofile,是lua脚本,打包成AB必须是txt

....

luaManger里面加载所有lua脚本实现:

//测试:开发时期使用加载luaView下所有的file

public void LoadLuaScriptsByDeve()

{

string sourceDir = Application.dataPath + "/Lua";

string[] files = Directory.GetFiles(sourceDir, "*.lua", SearchOption.AllDirectories);

for (int i = 0; i < files.Length; i++)

{

string str = files[i].Remove(0, sourceDir.Length);

string fileName = StaticUtils.GetPathLastString(str).Trim();

string filePath = files[i].Replace(fileName, "");

_luaState.AddSearchPath(filePath);

_luaState.DoFile(fileName); //加载lua脚本

}

}

//发布:AB在资源加载完成之后调用加载所有的lua脚本(暂时待优化),file自动生成

public void LoadAllLuaFile(TextAsset textAsset,LoaderParameter parms)

{

init();

_luaState.DoString(textAsset.text); //加载luafile

LuaFunction tempfun = _luaState.GetFunction("fileTable.GetLuaFilesName"); //注意需要看加载的file里面一致

if (tempfun != null)

{

object[] objs = tempfun.Call(0); //注意0是必须要的传参数

LuaInterface.LuaTable tb = objs[0] as LuaInterface.LuaTable; //转换成luaTbale

parms.parm = (int)parms.parm + tb.Length; //加上需要下载判断完成的标志

for (int i = 1; i <= tb.Length; i++)

{

string tempStr = tb[i].ToString() ;

string[] assets = tempStr.Split('@');

if (assets.Length >= 3)

{

Debug.Log("file 的写法不合法:AssetBundleName@AssetName :" + tempStr);

}

else

{

BaseLoader.LoadAssetCallBack call = new BaseLoader.LoadAssetCallBack(LoadAllFileCallBack);

LoadLuaScript(assets[0], assets[1], call, parms);

}

}

tempfun.Dispose(); //释放LunFunction

tempfun = null; //置空

}

else

{

Debug.LogError("LoadAllLuaFile----errro,查看file是否一致fileTable.GetLuaFilesName!");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: