2010-09-28 44 views
1

我正在iPhone上的射擊遊戲,我需要爲LUA腳本水平,敵人,等 所以我寫了一個腳本,子彈像這樣:的Lua:要求()不工作在iPhone上

-- 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); 
    ... 
} 

這將進入「否則,如果」分支,這意味着一些錯誤發生,但我不知道如何閱讀錯誤信息。

如果我註釋掉「require」這一行,敵人「level1_D2」就會像打算一樣工作而不會彈出子彈。我也嘗試將整個circular_bullet.lua複製到level1_D2.lua中,並且它工作正常,所以問題必須是require語句。

這兩個文件位於包的根目錄下。 (我不知道如何使它們在不同的目錄中,因此我發現Diner Dash將其腳本保存在不同的目錄中。) 但是,這兩個文件不在我的Xcode項目中的同一組中。我試圖把它們放在同一組中,但沒有發生任何事。

任何人都知道問題是什麼?非常感謝!

+0

它有可能試圖用fopen在錯誤的地方打開文件。看到這裏 - http://stackoverflow.com/questions/318341/how-to-fopen-on-the-iphone – 2010-09-28 17:24:35

+0

啊,我忘了注意,但我嘗試使用完整的路徑,沒有任何改變:( – Chengyang 2010-09-29 02:27:55

回答

1

最後我得到了答案!

lua需要功能搜索需要文件的「./scrips」目錄,所以我必須將這些腳本放在目錄中!

但我仍然不知道如何改變搜索路徑,但它確實有效。

+0

,它似乎取決於版本,很奇怪... – Chengyang 2010-10-01 05:16:59

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

我也有過這樣的時候我是新來的Lua。我不知道這也出現在iPhone上,但在Windows上,我不得不刪除'.lua'所以只需刪除擴展名。