Lua: require () не работает на iPhone

Я работаю над игрой-стрелялкой на 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» будет работать, как задумано, без стрельбы пулей. Я также попытался скопировать весь файл circle_bullet.lua в level1_D2.lua, и это сработало, поэтому проблема должна заключаться в заявлении require.

Эти два файла находятся в корневом каталоге пакета. (Я не знаю, как разместить их в другом каталоге, поэтому я обнаружил, что Diner Dash хранит свои скрипты в другом каталоге.) Однако эти два файла не находятся в одной группе в моем проекте Xcode. Я попытался объединить их в одну группу, но ничего не вышло.

Кто-нибудь знает, в чем проблема? Большое спасибо!


person Chengyang    schedule 28.09.2010    source источник
comment
Возможно, он пытается использовать команду fopen для открытия файла в неправильном месте. см. здесь - stackoverflow.com/questions/318341 / how-to-fopen-on-the-iphone   -  person Nick Van Brunt    schedule 28.09.2010
comment
Ах, я забыл отметить, но я попытался использовать полный путь и ничего не изменилось :(   -  person Chengyang    schedule 29.09.2010


Ответы (3)


Наконец-то я получил ответ !!!

функция lua require ищет в каталоге "./scrips" файлы require, поэтому я должен поместить эти скрипты в этот каталог!

Тем не менее, я до сих пор не знаю, как изменить этот путь поиска, но это сработало.

person Chengyang    schedule 30.09.2010

У меня есть фрагмент, который может помочь вам изменить этот путь:

// 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);   
person spurserh    schedule 22.10.2010

У меня тоже было это, когда я был новичком в Lua. Я не знаю, что это также появляется на iPhone, но в Windows мне пришлось удалить .lua, поэтому просто удалите расширение.

person scheurneus    schedule 21.10.2013