IndicePortaleFAQCercaRegistratiAccedi

Condividere | 
 

 Guida alla programmazione in LUA

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso 
AutoreMessaggio
psp2000
Admin
avatar

Numero di messaggi : 124
Data d'iscrizione : 09.02.09

MessaggioTitolo: Guida alla programmazione in LUA   Lun Feb 09, 2009 9:48 pm

Guida al LUA a cura di psp2000
Questa guida, è indirizzata verso coloro che vogliono iniziare a programmare in LUA su PSP.
È richiesta una conoscenza, anche minima, del LUA. A questo proposito, rimando a QUESTA guida

Indice
1. Introduzione
2. Le funzionalità del LUA su PSP
2.1 Stampare un testo su schermo
2.2 Creare e stampare una immagine
2.3 Creare e stampare una linea
2.4 Creare e stampare un rettangolo
2.5 Caricare e stampare una immagine
2.6 I controlli
2.7 I timer
2.8 Funzionalità di sistema
2.9 Controllare suoni e musica

--------------------------------------------------------------------------------

1. Introduzione

Che cos'è il LUA?

Essenzialmente, il LUA è un linguaggio interpretato.
Non è orientato agli oggetti, ma presenta alcune caratteristiche viste in alcuni linguaggi object oriented.

Perchè programmare in LUA su PSP?

Il motivo, a mio riguardo, è il seguente: questo è un linguaggio molto semplice ed intuitivo, e non si dovrebbero riscontrare difficoltà nell'apprenderlo. Colgo l'occasione per dire che bisogna sapere almeno le basi del LUA. A questo riguardo rimando ad un'altra guida, che troverete qui ( http://www.lua.org/manual/5.1/ ). È in inglese, ma non dovreste avere seri problemi nell'apprendere i concetti base del linguaggio.

Ambiente di sviluppo

Almeno su PSP, si potrebbe scrivere su un semplice documento di testo (.txt) per poi rinominarlo in .LUA. Ma non è questo quello che consiglio di fare. Il mio consiglio è, invece, quello di procurarsi un IDE, per esempio MiroLUA.
Supponiamo di aver scritto il nostro programma in un file script.lua. E ora, come facciamo ad eseguiro su PSP? La risposta è molto semplice: basta procurarsi il LUAPlayer. Questo è un programma che permette non solo di eseguire script LUA su PSP, ma anche su PC. Scariamo LUAPlayer per PSP da questo indirizzo ( http://luaplayer.org/downloads/lp20/LuaPlayer_v0.20_firmware15.zip ) e quello Windows da qui ( http://luaplayer.org/downloads/lp20/luaplayerwindows-0.20.zip ).
Detto questo, possiamo iniziare a programmare.

2. Le funzionalità del LUA su PSP

Trattiamo ora le funzionalità che LUA offre su PSP.

2.1 Stampare un testo su schermo

Iniziamo il tutorial spiegando come stampare un testo sullo schermo della PSP o del PC nel caso di LUAPlayer per Windows.
La funzione che stampa un testo su schermo (o su immagine, concetto che approfondirò) è la seguente:

image:print(posizione x,posizione y,testo da stampare,colore del testo)

Il termine print sta appunto a significare "disegna una stringa in una precisa coordinata". Questa coordinata è espressa nei campi "posizione X" e "posizione y". Nel campo "colore del testo" dobbiamo imettere i valori RGB con la quale verrà stampato il testo. Vediamo un esempio completo: supponiamo di voler stampare a schermo la frase "Hello World". Il codice risulterà essere il seguente:

bianco = Color.new(255,255,255)
while true do
screen:print(100,100,"Hello World",bianco)
screen.waitVblankStart()
screen.flip()
end

Abbiamo attribuito alla variabile bianco la funzione Color.new(r,g,b), che ha il compito di creare un nuovo colore in base ai valori RGB espressi nei campi r,g,b. Dopo di che, con "while true do", inizia il ciclo principale del programma. Subito sotto vediamo la funzione image:print(), già vista prima ma con una piccola particolarità. Al posto di "image" è infatti scritto "screen". La funzione, in questo caso, stampa il testo sullo schermo, molto semplicemente. A proposito ci sarebbero altri aspetti da approfondire, che ometterò. La funzione screen.waitVblankStart() aspetta che lo schermo si aggiorni, e screen.flip() lo aggiorna. Queste due funzioni sono da considerarsi essenziali in qualunque programma.
Avviamo ora il programma (su PSP o su PC) e, se tutto è andato bene, dovrebbe apparire sullo schermo della PSP o sullo schermo del PC la scritta "HelloWorld", su sfondo nero


E se noi volessimo stampare su schermo un testo in movimento? Ci possono essere diverse soluzioni. Quella che propongo io è la seguente:

bianco = Color.new(255,255,255)
x = 100
direzione = 0
while true do
if direzione == 0 then x = x + 2 end
if direzione == 1 then x = x - 2 end
if x == 400 then direzione = 1 end
if x == 10 then direzione = 0 end
screen:print(x,100,"hello world",bianco)
screen.flip()
screen.waitVblankStart()
screen:clear()
end


Color.new() l'abbiamo visto prima, nulla da commentare. Con "x = 100" dichiaro una variabile di valore numerico che va a determinare la coordinata X del testo da stampare. La variabile "direzione", inizializzata su valore 0, ha la funzione di spostare il testo a destra o a sinista in base alla posizione del testo stesso. Infatti, se "posizione" è uguale a 0, il testo si sposterà verso sinistra ( x = x + 2 ). Se uguale ad 1, invece, il testo si sposterà verso destra ( x = x - 2 ).
Con questo "pezzo" di codice

if x == 400 then direzione = 1 end
if x == 10 then direzione = 0 end

metto subito in chiaro che se la posizione X del testo è uguale a 400, il testo stesso si sposterà verso destra. Se invece è uguale a 10, si sposterà verso sinistra.
"screen:print(x,100,"hello world",bianco)" stampa il testo su schermo e "screen:clear()" pulisce lo schermo, "cancella" qualsiasi cosa ci trova stampato sopra (in questo caso cancella il testo).

2.2 Creare e stampare una immagine

Il LUA mette a disposizione diverse funzioni per lavorare con le immagini. Quella che vediamo ora è molto importante, permette di creare una immagine.

Image.createEmpty(larghezza, altezza)

N.B I valori massimi di larghezza e di altezza sono 512.

Vediamo un esempio completo. Vogliamo creare un programmino che crea una immagine rossa e che si muova a destra e a sinistra.

rosso = Color.new(255,0,0) --Inizializzazione colore rosso.
immagine = Image.createEmpty(50,50) --Creo una immagine con larghezza e altezza di 50.
x = 100 --Questa variabile determina la posizione dell'immagine nell'asse X.
direzione = 0 --Se 0: direzione verso destra; se 1 direzione verso sinistra.
while true do
immagine:clear(rosso) --Coloro l'immagine.
if direzione == 0 then x = x + 2 end
if direzione == 1 then x = x - 2 end
if x == 420 then direzione = 1 end
if x == 10 then direzione = 0 end
screen:blit(x,100,immagine) --Stampo l'immagine su schermo.
screen.flip()
screen.waitVblankStart()
screen:clear() --Pulisco lo schermo
end

I commenti li ho fatti direttamente nel codice. La funzione

image:blit(posizione x,posizione y,immagine da stampare)

non l'avevamo ancora vista. Ha il compito di stampare una immagine su schermo.

2.3 Creare e stampare una linea

Con la funzione

image:drawLine(x0, y0, x1, y1, colore)

Viene stampata su schermo una linea che parte dai punti x0,y0 fino ad arrivare ai punti x1,y1. Nel campo "colore" viene specificato il colore (con valori RGB) della linea. Come di consueto, vediamo un esempio:

bianco = Color.new(255,255,255)
posizione_x0 = 50
posizione_y0 = 50
posizione_x1 = 300
posizione_y1 = 200
while true do
screen:drawLine(posizione_x0,posizione_y0,posizione_x1,posizione_y1,bianco)
screen.flip()
screen.waitVblankStart()
end

Nulla di difficile da capire in questo esempio.

2.4 Creare e stampare un rettangolo

Vediamo ora come disegnare su schermo un rettangolo. La funzione è questa:

image:fillRect(x, y, larghezza, altezza, colore)

Nei campi "x" e "y" vengono specificate le coordinate del rettangolo, nei campi "larghezza" e "altezza" specifichiamo appunto la largezza e l'altezza del rettangolo.
Ecco un esempio:

bianco = Color.new(255,255,255)
posizione_x = 50
posizione_y = 50
larghezza = 100
altezza = 50
while true do
screen:fillRect(posizione_x,posizione_y,larghezza,altezza,bianco)
screen.flip()
screen.waitVblankStart()
end


Nulla da commentare.

2.5 Caricare e stampare una immagine

Con LUA è possibile caricare da memory stick una immagine con la funzione

Image.load("nomeimmagine.png")

N.B Sono supportate solamente immagini con formato .PNG e .JEPG

Per stamparla possiamo poi usare la funzione image:blit() vista in precedenza.
Vediamo un esempio completo di un programma che carichi una immagine e la visualizzi su schermo.

immagine = Image.load("immagine.png")
while true do
sreen:blit(100,100,immagine)
screen.flip()
screen.waitVblankStart()
end

Prima di tutto, carichiamo una immagine con nome "immagine.png" e la attribuiamo alla variabile "immagine". Nel ciclo principale, poi, stampiamo l'immagine nella posizione 100,100.

2.6 I controlli.

Con il LUA e' possibile gestire i tasti della PSP, grazie a Controls.read()
Prima di tutto, associamo Controls.read() ad una variabile, per convenzione denominata 'pad'. Dopo di che, posiamo controllare lo stato dei tasti.
Vediamo un semplicissimo esempio:

bg = Image.load("bg.png") --Immagine che usiamo come sfondo.
nero = Color.new(0,0,0)
pad = Controls.read()
while true do
screen:blit(0,0,bg)
if pad:cross() then screen:print(50,50,"Hai premuto X",nero)
end

E' tutto molto semplice, e l'unica linea di codice da commentare e':

if pad:cross() then screen:print(50,50,"Hai premuto X",nero)

Con questo, viene stampata a video la stringa "Hai premuto X" quando viene effettivamente premuto il tasto X.

Un altro esempio:

nero = Color.new(0,0,0)
pad = Controls.read()
while true do
screen:blit(0,0,bg)
if pad:left() and pad:right() then screen:print(50,50,"Hai premuto left e right",nero)
if not pad:left() and not pad:right() then screen:print(50,50,"Non hai premuto left e right",nero)
end

2.6 Funzionalità di sistema.

Il LUAPlayer mette a disposizione diverse funzionalità di sistema. Vediamole in dettaglio.

System.currentDirectory()
System.listDirectory()
System.createDirectory()
System.removeDirectory()
System.removeFile()
System.rename()
System.usbDiskModeActivate()
System.usbDiskModeDeactivate()
System.powerIsPowerOnline()
System.powerIsBatteryExist()
System.powerIsBatteryCharging()
System.powerGetBatteryChargingStatus()
System.powerIsLowBattery()
System.powerGetBatteryLifePercent()
System.powerGetBatteryLifeTime()
System.powerGetBatteryTemp()
System.powerGetBatteryVolt()
System.powerTick()
System.md5sum()
System.sioInit()
System.sioRead()
System.sioWrite()
System.irdaInit()
System.irdaRead()
System.irdaWrite()
System.sleep()
System.getFreeMemory()



premetto che io non ho ancora imparato bene, ma correggetemi in caso ho sbagliato qualcosa
Tornare in alto Andare in basso
Vedi il profilo dell'utente
 
Guida alla programmazione in LUA
Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto 
Pagina 1 di 1
 Argomenti simili
-
» La Guida alla clonazione
» Guida alla pittura condensata
» necron guida alla spesa
» [ArmyBlog] Demoni di Nurgle
» ALTARE DEL CAOS

Permessi di questa sezione del forum:Non puoi rispondere agli argomenti in questo forum
PSP Portal :: DEV LABS :: Tutorials-
Andare verso: