2010-09-28 5 views
1

Je travaille sur un jeu de tir sur iPhone et j'ai besoin lua pour les niveaux de script, ennemis, etc J'ai donc écrit un script de balle comme ceci:Lua: require() ne fonctionne pas sur iPhone

-- circular_bullet.lua 
local time_between_bullets = 0.2; 

... 

function InitializeCircularBullet(objectName) 
    ... 
end 

et un script ennemi:

-- level1_D2.lua 
require("circular_bullet.lua"); 

... 

Mais il est apparu que le script ennemi ne peut « exiger » le script de balle. Je essayé de regarder dans la bibliothèque de lua, et a constaté que, dans 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); 
    ... 
} 

Il entrerait dans le « else if » branche, ce qui signifie une erreur est survenue, mais je ne sais pas comment lire cette Message d'erreur.

Si je commente la ligne "require", l'ennemi "level1_D2" fonctionnera comme prévu sans tirer de balle. J'ai également essayé de copier l'intégralité de circular_bullet.lua dans level1_D2.lua, et cela a fonctionné, donc le problème doit être l'instruction require.

Ces deux fichiers se trouvent sous le répertoire racine du package. (Je ne sais pas comment les faire dans un répertoire différent, donc j'avais découvert que Diner Dash gardait ses scripts dans un répertoire différent.) Cependant les deux fichiers ne sont pas dans le même groupe dans mon projet Xcode. J'ai essayé de les mettre dans le même groupe mais rien ne s'est passé.

Quelqu'un sait quel est le problème? Merci beaucoup!

+0

Il est possible qu'il essaie d'utiliser fopen pour ouvrir le fichier au mauvais endroit. voir ici - http://stackoverflow.com/questions/318341/how-to-fopen-on-the-iphone –

+0

Ah, j'ai oublié de noter mais j'ai essayé d'utiliser le chemin complet et rien n'a changé :( – Chengyang

Répondre

1

Enfin j'ai eu la réponse !!! La fonction Lua require recherche le répertoire "./scrips" pour les fichiers requis, donc je dois mettre ces scripts dans le répertoire!

Pourtant, je ne sais toujours pas comment changer ce chemin de recherche, mais cela a fonctionné.

+0

et il semble dépendre de version, très étrange ... – Chengyang

1

J'ai un extrait ici qui pourrait vous aider à changer cette voie:

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

J'avais aussi quand j'étais nouveau Lua. Je ne sais pas cela apparaît également sur l'iPhone, mais sur Windows, j'ai dû supprimer le '.lua' Donc, il suffit de supprimer l'extension.

Questions connexes