«

»

dic 29

Print this Articolo

LUA – Caricare un file LUA da un file LUA

Immaginate di voler fare un gioco, e di volere dividere il menù principale dal gioco vero e proprio. Per evitare di complicare il codice, scrivendo cicli su cicli, la soluzione migliore per questo problema, è scrivere di versi file LUA, ognuno con una diversa funzione …
Per esempio potete creare un file che viene eseguito come menù principale, uno che viene eseguito come primo livello del gioco, uno che viene eseguito come sezioni impostazioni, e così via.
Il comando LUA per spostarsi da un file a un altro è :

dofile("path_del_file.lua")

È un comando molto semplice, perché basta solo specificare il path del file che si vuole caricare, sempre tra doppi apici, e con il formato LUA specificato, per sempio :

dofile("menu.lua")
dofile("level-1.lua")
dofile("options.lua")

Io personalmente utilizzo moltissimo questo comando, perché per ridurre il carico di lavoro sulla CPU divido i miei giochi in tanti file, che poi vado a caricare in base a ciò che devo fare.

Non dimenticatevi che se caricate un file, in quest’ultimo deve essere presente un il comando inverso, per potere tornare indietro, per esempio se da menu.lua passate a option.lua, in quest’ultimo file deve essere presente il comando per tornare al file menu.lua.

PROBLEMI :

Uno dei problemi derivanti dall’uso di questo comando, è che se avete un menù a scelta multipla nella pagina che andate a caricare, verrà selezionata automaticamente la scelta che era selezionata al momento del caricamento del file, cioè se la prima scelta del menù è “play game” quando andate a caricare il file del menù, il gioco parte subito perché viene selezionata la scelta “play game” automaticamente.
Tutto ciò accade quando usate lo stesso tasto per confermare il caricamento di tutte le pagine, perché se io uso il tasto croce per confermare il caricamento della pagina menu.lua, e nel file menu.lua, ho scritto che per confermare le scelte devo usare sempre il tasto croce, viene selezionata la prima scelta disponibile nel file, e quest’ultima viene anche confermata perché ho precedentemente premuto il tasto croce, e essendo il caricamento della pagina istantaneo, il sistema percepisce la pressione del tasto croce avvenuta appena prima. (la cosa è leggermente contorta, ma è più difficile da spiegare che da fare XD)

Per ovviare a questo problema, io ho utilizzato un timer, che per qualche secondo (2 o 3) non impedisce al comando di caricare nuove pagine.
Basta inserire all’inizio del codice della pagina una variabile che incrementa all’infinito, per poi utilizzarla come flag nel comando di caricamento.
Per esempio :


if pad:cross() and Selected=="play game" and i>15 then then dofile("level-1")

In questo caso fino a quando “i” non è maggiore di 15 (che corrisponde circa a 2 secondi), anche se io premo il tasto croce la pagina non viene caricata.

Se avete domande commentate questo post

_____________________________________________________________________________________________ Ti è piaciuto questo articolo ? Condividilo !

Permanent link to this article: http://taketheball.altervista.org/?p=257

2 comments

  1. Cinzia

    Dello stile “ti amo”?!? xD
    Il problema è che santoddio mi dice “No such file or directory” eppure non sono deficente il nome del file è quello giusto!

    ps. Utilizzo Love per la creazione del mio gioco

    1. fede94boss

      Ciao,
      se ti dice “No such file or directory” controlla non solo che il nome del file sia quello giusto, ma anche il percorso assoluto (o relativo, dipende se carichi un file che sta nella stessa directory oppure no) e infine l’estensione del file che vai a caricare.

      ps. se usi un psp normale devi usare come directory principale ms0:/ invece se usi una psp go devi usare ef0:/

      pps. scusa per il ritardo nel rispondere ma ci sono stati problemi con la recezione dei commenti e li vedo solo ora …

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>