1)Creazione della classe
La prima cosa da fare è sempre creare una classe, questa classe sarà composta da due metodi principali: "main" e "update"; perchè non initialize come nelle finestre? Lo spiegheremo nel prossimo paragrafo. Ecco la struttura della nostra classe:
class Scene_Perso
def main
end
def update
end
end
2)Teoria di una scena
Per capire in pieno cosa sia dobbiamo immaginarla. Immaginate di trovarvi in un gioco, ogni volta avete una scena: quando passate in una casa, camminate in una foresta, in una città etc.. Ma fateci caso non avrete mai tutte le scene in una volta sola! La variabile globale dell'RGSS per visualizzare una scena è questa:
$Scene
Alla variabile "$Scene" si può attribuire una qualsiasi scena ma, ripeto, ne verrà visualizzata solo una. Per rendervi ancora più chiaro il concetto prendiamo l'esempio dello scene title:
$scene = Scene_Title.new
Lo Scene_Title lo visualizzate SOLO all'inizio del gioco e non durante l'esplorazione di una mappa, nel menù etc... Tutti questi concetti sono basati su tre righe di codice che si trovano nel Main e sono queste:
while $scene != nil
$scene.main
end
Senza queste righe "profetiche" il vostro gioco non partirà. Analizzando il codice capiamo che il ciclo "while" si fermerà solo se la variabile "$scene" sarà uguale a zero, cioè la scena sarà terminata. La differenza sostanziale con il metodo "initialize" è che questo viene avviato automaticamente e non richiamato come una qualsiasi scena.
Adesso avete capito perchè in una scena si usa "main" e non "initialize". Questo paragrafo è un pò complicato ma lo ho semplificato il più possibile per le mie capacità, se avete problemi o non mi sono spiegato non esitate a chiedere ^^
3)Il metodo "main"
Torniamo a noi. Abbiamo ormai fatto la struttura della nostra classe adesso è arrivato il momento di inserire le istruzioni nel metodo "main". Questo metodo inizializzerà le nostre variabili, le nostre immagini... Per prima cosa andiamo ad inserire la nostra finestra:
@window = Window_Perso.new
Poi andremo a mettere gli update degli imput (quelli della tastiera) e degli output (grafica, audio...). Queste stringhe verranno ripetute in ogni scena:
# Transition until the current screen
Graphics.transition
# Aprire il ciclo
loop do
# Update delle pictures e degli imput
Graphics.update
Input.update
# Richiamare il metodo "update"
update
# Se la scena appartiene ad una classe differente da questa, "pulisci" ed abbandona la classe
if $scene != self
# Fermiamo il ciclo ed eseguiamo il resto
break
end
end
Graphics.freeze
Adesso spiegheremo passo passo il contenuto di questo codice.
Inizialmente ogni scena è "congelata" e quindi non potremmo farci nulla ma per questo c'è questa stringa che ci premette di "scongelarla":
Graphics.transition
Adesso bisogna updatare le immagini e gli imput; le metteremo in un ciclo in modo tale che gli elementi siano sempre aggiornati. Faremo così:
loop do
# Update delle pictures e degli imput
Graphics.update
Input.update
# Richiamare il metodo "update"
update
Il metodo "update" verrà definito in seguito. Adesso bisognerà fare in modo che quando verrà cambiata la scena, quella attuale sia di nuovo congelata:
# Se la scena appartiene ad una classe differente da questa, "pulisci" ed abbandona la classe
if $scene != self
# Fermiamo il ciclo ed eseguiamo il resto
break
end
end
Graphics.freeze
Manca ancora qualcosa... Dopo quest'ultimo comando, e sottolineo dopo, dovremo mettere un comando che permetterà alle finestre di essere rimosse quando cambiamo la scena, lo faremo con queste stringhe:
@window.dispose
Adesso ricapitoliamo il contenuto del metodo "main":
def main
@window = Window_Perso.new
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@window.dispose
end
4)Il metodo "update"
In questo metodo metteremo soltanto questo codice perchè abbiamo inserito solo una finestre, il comando è questo:
@window.update
In questo modo ogni finestra sarà aggiornata con il metodo "update".
Ecco la nostra scena come dovrebbe presentarsi:
class Scene_Perso
def main
@window = Window_Perso.new
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@window.dispose
end
def update
@window.update
end
end
Per richiamarla vi basterà fare un call script così:
$scene = Scene_Perso.new
5)Ancora una piccola precisazione
Perché quando dovete inserire uno script nelle istruzioni c'è sempre scritto "Inserire lo script prima del Main"? Ritorniamo alle righe "profetiche" che abbiamo scritto in precedenza
while $scene != nil
$scene.main
end
e teniamo presente che RPG Maker legge gli script dall'alto verso il basso. Se uno script si dovesse trovare dopo il main verrebbe eseguito solo se
$scene = nil
cioè solo quando nessuna scena è in esecuzione. Questo metodo viene adottato raramente solo per dare degli avvertimenti al giocatore quando finisce il gioco.











