Lua:require()无法在iPhone上运行

时间:2010-09-28 10:59:38

标签: iphone lua require

我正在开发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项目中不在同一个组中。我试过将它们放在同一组但没有发生任何事情。

有谁知道问题是什么?非常感谢!

3 个答案:

答案 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'所以只需删除扩展名。