【问题标题】:Lua: require() not working on iPhoneLua:require() 在 iPhone 上不起作用
【发布时间】:2011-04-18 05:48:35
【问题描述】:

我正在 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”分支,这意味着发生了一些错误,但我不知道如何阅读该错误消息。

如果我注释掉“require”行,敌人“level1_D2”将按预期工作而不发射子弹。我也尝试过将整个 circular_bullet.lua 复制到 level1_D2.lua 中,并且成功了,所以问题一定是 require 语句。

这两个文件在包的根目录下。 (我不知道如何将它们放在不同的目录中,因此我发现 Diner Dash 将其脚本保存在不同的目录中。) 但是,这两个文件不在我的 Xcode 项目中的同一组中。我尝试将它们放在同一个组中,但没有任何反应。

谁知道问题出在哪里?非常感谢!

【问题讨论】:

标签: iphone lua require


【解决方案1】:

我终于得到了答案!!!

lua require 函数在“./scrips”目录中搜索需要的文件,所以我必须把这些脚本放在目录中!

但我仍然不知道如何更改搜索路径,但它确实有效。

【讨论】:

    【解决方案2】:

    我这里有一个 sn-p,它可能会帮助你改变这条路径:

    // 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);   
    

    【讨论】:

      【解决方案3】:

      我刚接触 Lua 时也遇到过这个问题。我不知道这也出现在 iPhone 上,但在 Windows 上我必须删除“.lua”所以只需删除扩展名。

      【讨论】:

        猜你喜欢
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 2015-12-28
        • 2021-08-26
        • 2018-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多