我正在开发iPhone上的射击游戏,我需要lua来编写脚本级别,敌人等等。 所以我写了这样一个子弹脚本:
-- circular_bullet.lua
local time_between_bullets = 0.2;
...
function InitializeCircularBullet(objectName)
...
end
和敌人的脚本:
-- level1_D2.lua
require("circular_bullet.lua");
...
但事实证明,敌人的脚本不能“要求”子弹脚本。 我试着查看lua库,发现在loadlib.c中:
static int ll_require (lua_State *L) {
...
if (lua_isfunction(L, -1)) /* did it find module? */
break; /* module loaded sucessfully */
else if (lua_isstring(L, -1)) /* loader returned error message? */
lua_concat(L, 2); /* accumulate it */
else
lua_pop(L, 1);
...
}
它将进入“else if”分支,这意味着发生了一些错误,但我不知道如何阅读该错误消息。
如果我注释掉“要求”线,敌人“level1_D2”将按照预定的方式运行而不会射击子弹。我也尝试将整个circular_bullet.lua复制到level1_D2.lua,并且它有效,所以问题必须是require语句。
这两个文件位于包的根目录下。 (我不知道如何在不同的目录中创建它们,因此我发现Diner Dash将其脚本保存在不同的目录中。) 但是,这两个文件在我的Xcode项目中不在同一个组中。我试过将它们放在同一组但没有发生任何事情。
有谁知道问题是什么?非常感谢!
答案 0 :(得分:1)
最后我得到了答案!!!
lua require函数在“./scrips”目录中搜索require文件,所以我必须将这些脚本放在目录中!
但我仍然不知道如何改变搜索路径,但确实有效。
答案 1 :(得分:1)
我在这里有一个片段可能会帮助你改变这条道路:
// Initialize library path
lua_pushstring(L,"package");
lua_gettable(L, LUA_GLOBALSINDEX);
string path = string(Globals::GetPathPrefix())+"?.lua";
lua_pushstring(L, "path");
lua_pushstring(L, path.c_str());
lua_settable(L, -3);
lua_pop(L,1);
答案 2 :(得分:0)
当我刚接触Lua时,我也有这个。我不知道这也出现在iPhone上,但在Windows上我不得不删除'.lua'所以只需删除扩展名。