Creare Videogiochi - Game Developer
[GUIDA] Guida Basilare all'RGSS2 - Versione stampabile

+- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi)
+-- Forum: Rpg Maker Italia (https://www.making-videogames.net/giochi/Forum-Rpg-Maker-Italia)
+--- Forum: Rpg Maker Vx (https://www.making-videogames.net/giochi/Forum-Rpg-Maker-Vx)
+---- Forum: Script Rpg Maker Vx (https://www.making-videogames.net/giochi/Forum-Script-Rpg-Maker-Vx)
+---- Discussione: [GUIDA] Guida Basilare all'RGSS2 (/thread-GUIDA-Guida-Basilare-all-RGSS2)



[GUIDA] Guida Basilare all'RGSS2 - Johnny 97 - 01-05-2011

Su richiesta di Zapetino, ho fatto questa guida e la posto qui su Making Videogames. Mi scuso con Zapetino per il ritardo. La copia di questa guida è vietata, se non con l’autorizzazione dell’autore.

L’RGSS2, è il linguaggio di programmazione utilizzato in RPG Maker VX. Imparando questo linguaggio, si potranno aggiungere nuove funzioni al gioco, migliorare script ecc… L’RGSS” è una versione migliorata, o meglio, aggiornata dell’RGSS, utilizzato in RPG Maker XP.
L’RGSS2 (così come l’RGSS) è una variante del Ruby, e non è molto complesso, ma bisogna comunque impararlo bene per ottenere risultati decenti. Come per quasi tutti gli altri linguaggi di programmazione, bisogna essere a conoscenza di una buona parte della lingua inglese per memorizzare facilmente tutto o quasi, comunque, come già detto prima, non è complicato…
Iniziamo con lo scoprire le varie parti principali in uno script:

LE CLASSI:
Le Classi possono essere definite il gruppo principale in cui si sviluppa lo script. Senza una classe, uno script non può funzionare. Alcuni script hanno più di una classe per questioni di funzionalità, ma questo, non ci importa al momento. Le classi iniziano con il comando
Codice:
class
, e finiscono con il comando
Codice:
end
. Ad ogni classe, bisogna attribuire un nome (Il nome lo deciderete voi, il nome non è un comando, quindi potrete scrivere una parola qualsiasi come nome, ma deve avere come prima lettera una lettera maiuscola, può contenere un underscore "_", e non può contenere numeri.) , così
Codice:
class Nome_Classe
. Una Variabile Locale (Ne parleremo in seguito) settata in una classe, non può essere utilizzata in un’altra classe. Ci sono poi classi, che possono essere delle sottoclassi di un’altra classe. Quando una classe è sottoclasse, può utilizzare le stesse variabili locali utilizzate nella classe da cui deriva (Al momento di sicuro non avrete capito il concetto, lo riprenderemo dopo, quando faremo le variabili).
Codice:
class SottoClasse < Nome_Classe
In questo modo, le variabili locali di uno script possono essere riprese in un altro script.

LE METHOD DEFINITIONS:
Le Method Definitions, sono importanti quanto le classi, in quanto possono essere considerate come dei sottogruppi. Senza di esse, lo script non funzionerebbe . Il tipo di Method Definitions da utilizzare dipendono dallo scopo dello script. Le Method Definitions, iniziano con il comando
Codice:
def
, e terminano con il comando
Codice:
end
(Capitan Ovvio xD). Io non sono un esperto di scripting, ho imparato a scriptare guardando gli altri script, posso dirvi che esistono tanti tipi di Method Definitions, ma non so dirveli tutti e quali funzioni svolgono… Cioè, io non conosco la differenza fra due def diverse xD. Ecco una lista delle def che conosco e quali funzioni svolgono (Non sono sicuro delle funzioni che svolgono):
Codice:
def main (Svolge le funzioni principali, se è presente in uno script è sempre messo all’inizio, ed è sconsigliato da utilizzare per dei principanti)
def initialize (Svolge quasi tutto, se è presente in uno script è di solito all’inizio, ma può anche trovarsi dopo altre def)
def refresh (Dovrebbe essere utilizzato per aggiornare principalmente la grafica del gioco, come finestre, sprite ecc…)
def update (Dovrebbe far comparire le finestre, gli sprite, ecc… ma può svolgere anche le funzioni di “def refresh”)

Ne conosco molti, eh? xD Comunque, vi ripeto quest’argomento sulle Method Definitions non l’ho ancora capito tanto bene, e non sono sicuro sulle funzioni dei def postati sopra. Per fare pratica, consiglio di utilizzare il
Codice:
def initialize
(uso sempre quello xD).

AGGIORNAMENTO 28/07/2012: E' passato un bel po' di tempo da quando ho scritto questa guida e da allora ho scoperto qualcosa in più, soprattutto su che cosa sono queste "def". Innanzitutto, quasi tutto ciò che ho scritto sopra, riguardante le def, è sbagliato. Alla fine del post avrete altre informazioni.

I COMMENTI:
Il commento, è l’unica parte dello script che non viene elaborata dal compilatore, cioè, il commento non ha alcun effetto sullo script, è utilizzato soltanto per annotare qualcosa, magari per dare istruzioni per l’impostazione dello script. Comunque, nel suo piccolo, è molto utile perchè, come già detto, è utilizzato dagli autori degli script per comunicare con chi userà lo script. Per scrivere un commento basta anteporre il # nella riga.
Codice:
#Questo è un commento
Il commento, come potete notare, non ha bisogno del comando end per terminare, bensì terminerà automaticamente alla fine della riga
Codice:
#Questo è un commento
Adesso non è più un commento #Da qui in poi è un commento
Adesso non è più un commento.
Questo commento, al contrario di un normale commento, ha bisogno del comando end per terminare, questa volta preceduto da un “=”.
Codice:
=inizio commento
Bla bla bla bla…
Bla bla bla…
Bla bla…
Bla…

..
.
Fine commento =end

LE CONDIZIONI:
Le condizioni, possono essere considerate la parte portante di uno script. Quasi tutti gli script hanno bisogno di queste funzioni particolari, perché permettono di impostare meglio uno script. Le condizioni iniziano con il comando if (Che in inglese significa “se”) e terminano con… vabbè non ve lo dico… ormai credo l’abbiate capito che tutto termina con quel comando che mi sono stufato di pronunciare xD [spoiler]una vocina dal nulla parla… la sento… cosa dice?
Codice:
end
O.O[/spoiler] Comunque, end o non end, la struttura di una if è un po’ complessa. Dipende dall’utilizzo che ne vogliamo fare, può assumere diverse forme.
Codice:
if tu stai leggendo questa guida
Il computer dice “ciao!”
end
Questa è la struttura più semplice che può avere una if. Esaminiamola:
Codice:
if tu stai leggendo questa guida
Controlla se l’azione è compiuta. In questo caso se tu stai leggendo questa guida.
Codice:
il computer dice “ciao!”
L’azione da compiere se quella di prima è compiuta. In questo caso, se tu stai leggendo questa guida, il computer dice “ciao!”.
Codice:
end
-.-“
Un’altra struttura è :
Codice:
if tu stai leggendo questa guida
Il computer dice “ciao!”
else
il computer ti dice “Leggimi!”
end
esaminiamo questa struttura:
Codice:
if tu stai leggendo questa guida
Controlla se l’azione è compiuta. In questo caso se tu stai leggendo questa guida.
Codice:
il computer dice “ciao!”
L’azione da compiere se quella di prima è compiuta. In questo caso, se tu stai leggendo questa guida, il computer dice “ciao!”.
Codice:
else
In inglese, “else” significa “altrimenti”. Questo comando, controlla che se la prima azione (Quella con l’if), non è compiuta, si compie un’altra azione.
Codice:
il computer ti dice “Leggimi!”[code] Questa è “l’altra azione”.E’ l’azione da copiere se la prima azione (Quella con l’if) non viene compiuta. In questo caso, se tu non stai leggendo questa guida, il computer ti dice “Leggimi!”
[code]end
… Mi dispiace dirlo ma… termina la condizione. xD L’ho detto xD
Poi ci sono strutture più complesse ancora, dove ci sono if dentro if, if dentro else e molto altro, che oggi non analizzeremo. Inoltre, una fi può essere sviluppata tutta su una riga sola, così:
Codice:
if tu stai leggendo questa guida then Il computer dice “ciao!” else il computer ti dice “Leggimi!” end
L’unica cosa che cambia è che fra l’if e l’azione da compiere, c’è then, ma questa cosa di sviluppare un’if su tutta una riga non ha senso, quindi, è meglio utilizzare la struttura normale, che è molto più ordinata e non fa confondere.

LE VARIABILI:
Le variabili, sono molto utilizzate nelle condizioni, o per impostare qualcosa. Esistono 3 tipi di variabili:
Variabili Locali (Quella di cui vi ho parlato prima), che funziona solo nella classe in cui è stata impostata;
Variabili Istanze , che funziona in tutto lo script;
Variabili Globali, che funziona in tutti gli script del gioco.
Esempi:
Codice:
variabile_locale #Inizia con una lettera minuscola
Codice:
@variabile_istanza #Inizia con @
Codice:
$variabile_globale #inizia con $
Alle variabili, è possibile, aggiungere, sottrarre, moltiplicare, dividere un numero, oppure impostarla di nuovo. Impariamo ad eseguire operazioni con le variabili, e a controllarle:
Codice:
class prova
@variabile = 1 #Ho creato una variabile e l’ho settata a 1
def initialize
if @variabile == 1 #Controlla se la variabile @variabile è uguale a 1
@variabile + 3 #Se la variabile è uguale a 1, aggiunge 3
end
if @variabile > 1 #Controlla se la variabile @variabile è maggiore di 1
@variabile – 2 #Se la variabile è maggiore di 1, sottrae 2
end
if @variabile < 4 #Controlla se la variabile @variabile è minore di 4
@variabile * 2 #Se la variabile è minore di 4, moltiplica per 2
end
if @variabile => 4 #Controlla se la variabile @variabile, è uguale o maggiore a 4
@variabile / 4 #Se la variabile è maggiore o uguale a 4, divide per 4
end
if @variabile =< 2 #Controlla se la variabile @variabile è uguale o minore a 2
(@variabile + 1) * 2 #Se la variabile è minore o uguale a 2, aggiungi 1 e poi moltiplica per 2.
end
if @variabile >< 0 #Controlla se la variabile @variabile è diversa da 0
@variabile / (1 + 1) #Se la variabile è diversa da zero, divide per 2
end
Come potete vedere, con le variabili non solo si possono eseguire operazioni, ma anche espressioni. Inoltre, le variabili, possono anche essere settate come lettere, invece di numeri:
Codice:
@variabile = ciao
se una variabile, è settata su nil, così:
Codice:
@variabile = nil
vuol dire che è nulla, cioè, esiste, ma è annullata.

LE SWITCH:
Utili come le variabili, ma hanno meno possibilità di settaggio, infatti può essere settata solo su ON o OFF. Ecco due esempi di switch:
Codice:
@switch = true #Switch ON
Codice:
@switch = false #Switch OFF
Come potete notare, le switch iniziano con @, proprio come le variabili istanze. Esempi di controlli delle switch:
Codice:
if @switch == true/false #Controllla se la switch @switch è ON/OFF
succede qualcosa
end


VARIABILI GLOBALI UTILI:
Il gioco, utilizza molte variabili globali, ad esempio, ce n’è una per I soldi, una per indicare le variabili impostate dalla finestra eventi, ecc… Queste variabili globali, possono essere molto utili nella creazione degli script. Ecco qui le più importanti:
Codice:
$game_switches[switch_id] #E’ una switch impostata dalla finestra eventi. Al posto di switch_id va inserito l’ID della switch.
$game_variables[variable_id] #E’ una variabile impostata dalla finestra eventi. Al posto di variable_id va inserito l’ID della variabile.
$game_party.gain_item(Item ID, Quantità) #Da un determinate oggetto al party. Al posto di Item ID va messo l’ID dell’item, al posto di Quantità, la quantità di oggetti da ricevere.
$game_party.gain_gold(Quantità)  #Da monete al party. Al posto di Quantità va messa la quantità di soldi da ricevere.
$game_party.gain_weapon(Weapon ID, Quantità) #Da un’arma al party. Ormai credo abbiate capito che al posto di Weapon ID va messo l’ID dell’arma, mentre al posto di Quantità, la quantità di armi da ricevere…
$game_party.gain_armor(Armor ID, Quantità) #Da un’armatura al party.
$game_party.actors[Actor ID].learn_skill(Skill ID) #Fa imparare una skill ad un personaggio. Al posto di Actor ID va messo l’ID del personaggio a cui far imparare la skill, e al posto di Skill ID va messo l’ID della skill da far imparare.

Credo che questi vi basteranno e avanzeranno per iniziare a scriptare…
Bene adesso che abbiamo finito una parte di teoria (Il resto lo analizzeremo in un’altra futura guida, al momento usate questa parte di RGSS2), passiamo alla pratica. Proveremo a fare uno script, che aggiunge al giocatore 900 monete, sela prima switch del gioco è attivata. E’ uno script semplicissimo da fare, iniziamo!
Come prima cosa, bisogna mettere la classe e la method definition:
Codice:
class Cheat_Soldi #Classe e nome della classe
def initialize #Def e tipo di def
poi, bisogna controllare se la switch è attivata, quindi sviluppare il resto della condizione:
Codice:
if $game.switches[0001] == true #Controlliamo se la switch 0001 è attiva
$game_party.gain_gold(900) #Aggiunge 900 gold se la switch è ON
end #Termina la condizione
Ecco il risultato finale:
Codice:
class Cheat_Soldi
def initialize
if $game.switches[0001] == true
$game_party.gain_gold(900)
end
end
end

Spero abbiate capito tutto xD Ciao, e grazie per aver letto la guida!

La copia della seguente guida è vietata a chiunque, se non con l’autorizzazione dell’autore (Io xD)


AGGIORNAMENTO 28/07/2012: Presto posterò una nuova guida nella sezione RPG Maker VX Ace, che riprenderà alcuni concetti di questa guida per approfondirli (Come ad esempio le method definitions, che non ho spiegato bene in questa guida), e spiegherò le varie differenze fra i vari RGSS (RGSS in RPGM XP, RGSS2 in RPGM VX e RGSS3 in RPGM VX Ace).


RE: [GUIDA] Guida all'RGSS2 - Zapetino - 01-05-2011

grazie mille lo avevo gia iniziato a studiare ma grazie lo stesso! tra un po posto il mio primo script
ah delle precisazioni : la classe deve avere la prima lettera maiuscola e se non sbaglio non può contenere numeri


RE: [GUIDA] Guida all'RGSS2 - Johnny 97 - 01-05-2011

scusa per il ritardo... ci sono stato più del previsto... si, la classe deve iniziare con la lettera maiuscola e non deve contenere numeri, me ne ero dimenticato, adesso modifico, grazie... comunque, per quanto riguarda le def, sai qualcosa in più? perchè non ne sono tanto sicuro...


RE: [GUIDA] Guida all'RGSS2 - Zapetino - 01-05-2011

i metodi servono per creare azioni personalizzate so usarli ma non so come spiegarlo XD
poi inseriscinella guida l'uso delle azioni attr_reader, attr_writer e attr_accessor
che se non sai cosa sono ecco la spiegazione XD :
allora quando dichiaramo una variabile in una classe a meno che non siano variabili globali non saranno visibili al di fuori di essa quindi si usano le seguenti funzioni per
attr_reader per leggere la variabile fuori dalla classe
attr_writer per scriverla
attr_accessor per entrambe le azioni

si usa così
Codice:
attr_accessor : ciccio
class Main_class
ciccio = 10 #variabile locale quindi visibile solo nella classe
end
ciccio = 15

ah dimenticavo:
per dichiarare un classe derivata da un altra si fa così:
Codice:
class Mia_classe < Nome_Classe_Madre



RE: [GUIDA] Guida all'RGSS2 - Alche - 02-05-2011

bravissimi tutti e due, grazie.


RE: [GUIDA] Guida all'RGSS2 - Johnny 97 - 02-05-2011

(01-05-2011, 10:54 PM)Zapetino Ha scritto: poi inseriscinella guida l'uso delle azioni attr_reader, attr_writer e attr_accessor
che se non sai cosa sono ecco la spiegazione XD :
allora quando dichiaramo una variabile in una classe a meno che non siano variabili globali non saranno visibili al di fuori di essa quindi si usano le seguenti funzioni per
attr_reader per leggere la variabile fuori dalla classe
attr_writer per scriverla
attr_accessor per entrambe le azioni

si usa così
Codice:
attr_accessor : ciccio
class Main_class
ciccio = 10 #variabile locale quindi visibile solo nella classe
end
ciccio = 15
si, questo lo sapevo, ma non ho voluto inserirlo per non fare confusione, dato che chi leggerà questa guida saràa alle prime armi... ho messo le nozioni di base... poi magari farò un'altra guida (quando imparerò meglio l'rgss2...), ma forse, arriverai prima a farla tu...

(01-05-2011, 10:54 PM)Zapetino Ha scritto: ah dimenticavo:
per dichiarare un classe derivata da un altra si fa così:
Codice:
class Mia_classe < Nome_Classe_Madre
C'è gia scritto, guarda bene xD

Piccola curiosità, tutti i tuoi avatar ballano? xD


RE: [GUIDA] Guida all'RGSS2 - Zapetino - 02-05-2011

ah si non l'avevo visto XD