- 积分
- 136401
- 注册时间
- 2014-12-27
- 最后登录
- 2026-1-24
- 在线时间
- 605 小时
- 威望
- 562
- 贡献
- 29
- 金币
- 52903
- 钢镚
- 1422
- 交易凭证
- 1
- 分享
- 0
- 精华
- 33
- 帖子
- 2094
- 主题
- 1742
TA的每日心情 | 擦汗 2018-4-10 15:18 |
|---|
签到天数: 447 天 [LV.9]以坛为家II
超级版主
    
- 威望
- 562
- 贡献
- 29
- 金币
- 52903
- 钢镚
- 1422
 
|
配置环境与工具: cocos2d-x-2.2.3,Lua5.1,tulua++,Xcode;
测试工程: /cocos2d-x-2.2.3/samples/Lua/HelloLua
Lua在我的项目中的定位
Lua本来是一种轻快而小巧的脚本语言,随着手游大行其道,它逐渐被用来开发中型 甚至大型的项目,在我的项目中 并不打算全部逻辑放到Lua层,而是让轻快的Lua去做轻快的事情,Lua只是火车上的舒服的空调或者座椅.让火车头C++同学去做火车头应该做的事情.
Lua中的require
require函数实现了不同lua文件的加载,类似于C++中的include,java中的import,
require函数会在路径中搜索输入的文件路径,大致流程如下:
- 在package.loaded查找 若找到 则结束
- 在package.preload查找 如果preload存在 则调用 结束
- 根据package.path的模式查找lua库 若找到 结束
- 根据package.cpath查找c库 若找到 则加载C库 然后进行加载C库的处理,处理完成后 则结束
这个过程虽然并不复杂,但是在搜索过程中可能会涉及几个模块式路径:
./?.lua;./?.lc;/usr/local/?/init.lua
使用require,我认为可能的隐患
但是目前我项目中是几个同事一起协作各自编写不同模块的Lua代码.这就有一个隐患(可能是隐患),如果两个同事在不同路径编写的lua文件同名例如都叫init.lua.那在require调用搜索的时候会不会发生引用错误呢?我对这个问题目前还不太确定,由此对加载lua文件有了另外一种实现方式.
增加C接口实现调用
参照上一篇给Lua增加C接口函数.我们再增加一个函数实现给Lua加载lua文件.
- //GameLuaAPI.H
- // tolua_begin
- void API_LoadLuaFile( char *szLUAFileName);
- void API_LuaSample();
- // tolua_end
复制代码 函数的实现:
- // GameLuaAPI.cpp
- // 加载LUA脚本
- void API_LoadLuaFile( char *szLUAFileName)
- {
- CCLOG("API_LoadLuaFile = %s",szLUAFileName);
- CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();
- std::string path =
- CCFileUtils::sharedFileUtils()->fullPathForFilename(szLUAFileName);
- pEngine->executeScriptFile(path.c_str());
- }
复制代码 然后导出到Lua,在Lua中如此加载源文件:
- -- add lua source file
- API_LoadLuaFile("test.lua")
- -- add end
- function main( )
- -- sample call c++ func
- API_LuaSample()
- -- sample cal lua func
- test();
- end
- main()
复制代码 如此遍实现了 脱离require函数来实现加载源文件的功能.这种方式靠谱不靠谱呢?目前我的项目中选择使用这种方式所有Sample托管在我的github
本文来自:http://shadowkong.com/archives/1741
|
|