Jump to content
Rpg²S Forum

Fanton's Tutorial - RGSS


fanton95
 Share

Recommended Posts

Tutorial RGSS

Tutorial n°2

 

 

 

1. Introduzione

Per
: RPG Maker XP

Autore
: Fanton95

Descrizione
: Creazione di una scena in RGSS

Ultima modifica
: 27/10/2009

 

 

 

2. Tutorial

Creazione di una scena

 

 

 

Nozioni necessarie: Saper creare una finestra in RGSS.

 

 

 

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 screenGraphics.transition  # Aprire il cicloloop do  # Update delle pictures e degli imputGraphics.updateInput.update  # Richiamare il metodo "update"update  # Se la scena appartiene ad una classe differente da questa, "pulisci" ed abbandona la classeif $scene != self  # Fermiamo il ciclo ed eseguiamo il resto 	 break   endend 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 imputGraphics.updateInput.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 classeif $scene != self  # Fermiamo il ciclo ed eseguiamo il resto 	 break   endend 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.disposeend

 

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 XP 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.

 

Abbiamo terminato anche questo tutorial. La prossima lezione sarà "Le immagini - Sprites".

 

 

 

 

 

"Oh perché dobbiamo essere così, noi? – ci domandiamo talvolta allo specchio - con questa faccia, con questo corpo? – alziamo una mano, nell'incoscienza; e il gesto ci resta sospeso. Ci pare strano che l'abbiamo fatto noi. Ci vediamo vivere. […] In certi momenti di silenzio interiore, in cui l'anima nostra si spoglia di tutte le funzioni abituali, e gli occhi nostri diventano più acuti e più penetranti, noi vediamo noi stessi nella vita, e in se stessa la vita, quasi in una modalità arida, inquietante; ci sentiamo assaltare da una strana impressione, come se, in un baleno, ci si chiarisse una realtà diversa da quella che normalmente percepiamo, una realtà vivente oltre la vista umana, fuori delle forme dell'umana ragione." [L.P.]

 

http://img43.imageshack.us/img43/4231/vgmiud3f.png

 

 

http://rpg2s.net/gif/SCContest1Oct.gif http://www.rpg2s.net/img/fablecontest3rd.png http://rpg2s.net/gif/SCContest1Oct.gif

 

RPG by forum

 

 

 

 

 

 

 

 

 

 

http://img59.imageshack.us/img59/6/av2w.png

Nome: Erech (In elfico "lancia solitaria", da er (ereb) = "solitario" e ech = "lancia")

 

Età: 19

 

Razza: Umani

 

Descrizione: Erech è un ragazzo alto e slanciato, dalla corporatura tonica e scattante. Ha capelli lunghi e violacei come gli occhi che però sono spesso coperti in parte da un elegante cappello nero. Veste con uno stile classico, una camicetta bianca sotto una giacca nera e un fiocco al collo ornato con un'immancabile piuma azzurra. Gli piace leggere e scrivere e ama tradurre testi in lingue antiche.

 

Carattere: Il ragazzo ha un carattere chiuso e introverso, è di poche parole e preferisce i fatti alle parole. Non si relaziona spesso con i coetanei o se lo fa significa che si fida cecamente della persona che ha davanti; è diffidente e tende a non raccontare fatti del suo passato, belli o brutti che siano.

 

 

Link to comment
Share on other sites

Be potevi essere un'po più preciso magari per la gestione di input per le finestre selezionabili comunque per i neofiti è ottimo per capire il concetto. Comunque hai fatto un errore dcendo che è possibile fare una solascena all vlta perchè posso anche mettere in Main

$scene2 =Scene_Title.new

e poi metto

while $scene2 != nil	$scene2.main  end

.

Così possiamo avere 2 scene contemporaneamente anche se penso che sarebbe difficile gestirle entrambe

Edited by kingartur2

Per qualsiasi motivo non aprite questo spoiler.

 

 

Ho detto di non aprirlo !

 

 

Se lo apri ancora esplode il mondo.

 

 

Aaaaaa è un vizio.

 

 

Contento? Il mondo è esploso, sono tutti morti

per colpa della tua curiosità .

 

 

Vuoi che ti venga anche il morbillo, la varicella e l'AIDS???

 

 

O bravo ora sei un malato terminale e nessuno

ti puo curare, sono tutti morti !

 

 

Se clicchi ancora una volta il PC esplode.

 

 

E dai smettila !!

 

Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://s8.postimg.org/yntv9nxld/Banner.png

http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif

Link to comment
Share on other sites

Grazie per la precisazione correggo subito. Per le finestre selezionabili ci saranno due tutorial appositi e li entrerò nel dettaglio.

 

EDIT: niente non ci riesco ho i soliti fastidiosissimi problemi con l'editor

Edited by fanton95

"Oh perché dobbiamo essere così, noi? – ci domandiamo talvolta allo specchio - con questa faccia, con questo corpo? – alziamo una mano, nell'incoscienza; e il gesto ci resta sospeso. Ci pare strano che l'abbiamo fatto noi. Ci vediamo vivere. […] In certi momenti di silenzio interiore, in cui l'anima nostra si spoglia di tutte le funzioni abituali, e gli occhi nostri diventano più acuti e più penetranti, noi vediamo noi stessi nella vita, e in se stessa la vita, quasi in una modalità arida, inquietante; ci sentiamo assaltare da una strana impressione, come se, in un baleno, ci si chiarisse una realtà diversa da quella che normalmente percepiamo, una realtà vivente oltre la vista umana, fuori delle forme dell'umana ragione." [L.P.]

 

http://img43.imageshack.us/img43/4231/vgmiud3f.png

 

 

http://rpg2s.net/gif/SCContest1Oct.gif http://www.rpg2s.net/img/fablecontest3rd.png http://rpg2s.net/gif/SCContest1Oct.gif

 

RPG by forum

 

 

 

 

 

 

 

 

 

 

http://img59.imageshack.us/img59/6/av2w.png

Nome: Erech (In elfico "lancia solitaria", da er (ereb) = "solitario" e ech = "lancia")

 

Età: 19

 

Razza: Umani

 

Descrizione: Erech è un ragazzo alto e slanciato, dalla corporatura tonica e scattante. Ha capelli lunghi e violacei come gli occhi che però sono spesso coperti in parte da un elegante cappello nero. Veste con uno stile classico, una camicetta bianca sotto una giacca nera e un fiocco al collo ornato con un'immancabile piuma azzurra. Gli piace leggere e scrivere e ama tradurre testi in lingue antiche.

 

Carattere: Il ragazzo ha un carattere chiuso e introverso, è di poche parole e preferisce i fatti alle parole. Non si relaziona spesso con i coetanei o se lo fa significa che si fida cecamente della persona che ha davanti; è diffidente e tende a non raccontare fatti del suo passato, belli o brutti che siano.

 

 

Link to comment
Share on other sites

Benissimo, quansi quasi mi metto a fare un tutoral pure io sulla personalizzazione delle scene base.....e da un'po che non scrivo script e mi devo un'po rinsavire

Per qualsiasi motivo non aprite questo spoiler.

 

 

Ho detto di non aprirlo !

 

 

Se lo apri ancora esplode il mondo.

 

 

Aaaaaa è un vizio.

 

 

Contento? Il mondo è esploso, sono tutti morti

per colpa della tua curiosità .

 

 

Vuoi che ti venga anche il morbillo, la varicella e l'AIDS???

 

 

O bravo ora sei un malato terminale e nessuno

ti puo curare, sono tutti morti !

 

 

Se clicchi ancora una volta il PC esplode.

 

 

E dai smettila !!

 

Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://s8.postimg.org/yntv9nxld/Banner.png

http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif

Link to comment
Share on other sites

  • 4 weeks later...

kingartur2: quando carichi una scena viene eseguito il main di questa e spesso nelle scene c'è un loop quindi non è possibile gestirne due contemporaneamente senza generare conflitti.

 

fanton95: dovresti correggere in alto, hai scritto $Scene piuttosto che $scene, il ruby è case-sensitive :)

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

No keroro l'ho provato è non mi da il minimo errore a parte la sovrapposizione delle window delle 2 scene

Per qualsiasi motivo non aprite questo spoiler.

 

 

Ho detto di non aprirlo !

 

 

Se lo apri ancora esplode il mondo.

 

 

Aaaaaa è un vizio.

 

 

Contento? Il mondo è esploso, sono tutti morti

per colpa della tua curiosità .

 

 

Vuoi che ti venga anche il morbillo, la varicella e l'AIDS???

 

 

O bravo ora sei un malato terminale e nessuno

ti puo curare, sono tutti morti !

 

 

Se clicchi ancora una volta il PC esplode.

 

 

E dai smettila !!

 

Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://s8.postimg.org/yntv9nxld/Banner.png

http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif

Link to comment
Share on other sites

Ma infatti ho detto:

Così possiamo avere 2 scene contemporaneamente anche se penso che sarebbe difficile gestirle entrambe

magari non lo hai notato.

Io dicevo che teoricamente si può fare ma praticamente è difficile ma non impossibile

Per qualsiasi motivo non aprite questo spoiler.

 

 

Ho detto di non aprirlo !

 

 

Se lo apri ancora esplode il mondo.

 

 

Aaaaaa è un vizio.

 

 

Contento? Il mondo è esploso, sono tutti morti

per colpa della tua curiosità .

 

 

Vuoi che ti venga anche il morbillo, la varicella e l'AIDS???

 

 

O bravo ora sei un malato terminale e nessuno

ti puo curare, sono tutti morti !

 

 

Se clicchi ancora una volta il PC esplode.

 

 

E dai smettila !!

 

Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://s8.postimg.org/yntv9nxld/Banner.png

http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif

Link to comment
Share on other sites

Sì ma è senza senso in un automa lineare gestire due stati concorrenti :P

Significa solo che hai modellato male il problema.

Se entrambi hanno accesso a video e non c'è una politica di integrazione dei contributi e una adeguata gestione degli accessi l'unico modo per renderli compatibili è togliere il main loop ad uno dei due, ma senza un main loop non hai più due scene ma una scena e una classe qualsiasi :)

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

Capito quello che hai detto ma ti ripeto che volevo solo precisarlo come concetto teorico non come cosa che si può fare

Per qualsiasi motivo non aprite questo spoiler.

 

 

Ho detto di non aprirlo !

 

 

Se lo apri ancora esplode il mondo.

 

 

Aaaaaa è un vizio.

 

 

Contento? Il mondo è esploso, sono tutti morti

per colpa della tua curiosità .

 

 

Vuoi che ti venga anche il morbillo, la varicella e l'AIDS???

 

 

O bravo ora sei un malato terminale e nessuno

ti puo curare, sono tutti morti !

 

 

Se clicchi ancora una volta il PC esplode.

 

 

E dai smettila !!

 

Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://s8.postimg.org/yntv9nxld/Banner.png

http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif

Link to comment
Share on other sites

Capito quello che hai detto ma ti ripeto che volevo solo precisarlo come concetto teorico non come cosa che si può fare

Per qualsiasi motivo non aprite questo spoiler.

 

 

Ho detto di non aprirlo !

 

 

Se lo apri ancora esplode il mondo.

 

 

Aaaaaa è un vizio.

 

 

Contento? Il mondo è esploso, sono tutti morti

per colpa della tua curiosità .

 

 

Vuoi che ti venga anche il morbillo, la varicella e l'AIDS???

 

 

O bravo ora sei un malato terminale e nessuno

ti puo curare, sono tutti morti !

 

 

Se clicchi ancora una volta il PC esplode.

 

 

E dai smettila !!

 

Uff!! Hai cliccato tante volte che ho dovuto sostituirlo con un codebox.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://s8.postimg.org/yntv9nxld/Banner.png

http://img204.imageshack.us/img204/8039/sccontest3octpl3.gif

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...