Ceci est le début d'une série de tuto autour du RGSS3 qui sortira a un rythme pas du tout régulier.
Bon pour commencée qu'est ce que le RGSS :
- Wiki a écrit:
RGSS est une implémentation de l'interpréteur de Ruby en C++ développé par l'éditeur de jeu vidéo Enterbrain. Il est distribué sous licence propriétaire dans la série RPG Maker dans ses deux dernières versions XP et VX. La dernière version stable (RGSS 3) est sortie en même temps que l'extension de Rpg Maker VX : Rpg Maker VX Ace.
(merci wiki ^^)
Et pour éviter de donner de faux espoir je vais être clair :
RGSS = RM XP; RGSS2 = RM VX; RGSS3 = RM VXAce
Donc ce tuto est réservé aux personnes voulant scripter sur RM VXAce. (désoler pour les autres.)
1) Structure d'un scriptJe vais commencer par vous parler de la structure d'un script:
Un script est composé de:
-class:
Une class commence par le mot clé =>
class et est suivit du nom de la class ainsi que du nom de la class qu'elle hérite, et se termine par le mot clé
end(la première lettre du nom de la class dois être en majuscule)
Une class est une sorte de modèle comportant certaine propriétés et fonctionnalités.
exemple => imaginons le plans d'une maison, on vois comment elle doit être mais il faut un "constructeur" pour pouvoir y habiter.(pas très clair tous ça mais ne vous inquiétez pas vous comprendrez à la fin)
-method/fonction:
Une method, ou fonction comme vous voulez, commence par le mot clé
def et fini par
end.
Une method est une sorte de fonctionnalité d'une class et peut donc être appeler de n'importe quel instance de la class à laquelle elle appartient et sert notamment à "compacter" en une ligne de code plusieurs autres.
exemple => imaginons que nous devions faire 5 fois la même chose dans une class, et que ce que nous devons faire nécessite au moins 50 ligne de code et bas au lieux de marquer 5 fois les 50 lignes il nous suffira de créée une method avec nos 50 lignes et appeler juste 5 fois cette method.(Pas très clair non plus mais vous comprendrez aussi à la fin.)
-variable:
Il existe 5 type de variable.
-Les variables
Local que l'on écris comme ceci =>
variable Elles ne sont utilisable que dans la method où elles sont déclarées
-Les variables
De Class que l'on écris comme ceci =>
@variable Elles sont utilisable dans toute la class ou elles sont déclarées
-Les variables
De Class Partagées que l'on écris comme ceci =>
@@variable Elles sont utilisable par toute les instances de d'une même class.(perso, j'ai jamais utilisée ^^)
-Les variables
Global que l'on écris comme ceci =>
$variable Elles sont utilisable partout
-Les variables
Constantes que l'on écris comme ceci =>
Variable(perso, je met toute les lettres en majuscule mais ça change rien)
Elles ne peuvent pas être modifier (d'où son nom "Constante")
2) Première fenêtreBon Maintenant que je viens de vous expliquer les bases nous pouvons nous atteler à faire notre première fenêtre:
- Code:
-
#===============================================================================
class Window_Test < Window_Base
#===============================================================================
def initialize
super(0, 0, Graphics.width, Graphics.height)
@text = "hola"
refresh
end
#-------------------------------------------------------------------------------
def refresh
self.contents.clear
draw_text(0,0,contents_width, line_height, "coucou", 1)
end
def tuto_draw
draw_text(0,line_height,contents_width, line_height, text, 1)
end
end
Ne vous inquiétez pas je vais décortiquer tous ça avec vous.
La première ligne permet de créer notre class:
- Code:
-
class Window_Tuto < Window_Base
Vous allez me dire mais qu'est ce que c'est que cette merde là:
- Code:
-
< Window_Base
Et bah cette merde sert à définir un héritage, en claire notre Window_Tuto hérite des fonctions et variables de la class Window_Base.
- Code:
-
def initialize
super(0, 0, Graphics.width, Graphics.height)
@text = "hola"
refresh
end
Vous l'aurez compris, on viens de créer notre première method.(initialize est une method de base de la création d'une fenêtre)
- Code:
-
def initialize
Définition de la method initialize.
- Code:
-
super(0, 0, Graphics.width, Graphics.height)
"super" vous permet d’appeler la méthode de même nom défini dans la classe parent, c'est à dire que le code de méthode initialize de Window_Base est exécuté.
- Code:
-
(0, 0, Graphics.width, Graphics.height)
dans l'ordre ça donne
- position "x" de votre fenêtre.
- position "y" de votre fenêtre.
- largeur de votre fenêtre.
- hauteur de votre fenêtre.
(Les coordonnées (0,0) correspondes au coins supérieur gauche de l'écran donc plus x est élever plus la fenêtre ce trouvera à droite et plus y est élever plus la fenêtre ce trouvera en bas)
(Graphics.width renvois la valeur de l'écran de jeu et Graphics.height la hauteur)
Vous pouvez vous amusez à changer les valeurs.
- Code:
-
@text = "hola"
On déclare une variable de class que l'on appelle "text" et on l'initialise avec la chaine de caractère "hola". (en claire on dis que @text = "hola" ^^)
On s'en servira plus tard
- Code:
-
refresh
Cette ligne signifie juste que l'on appelle la method "refresh".
Et bien sur ne pas oubliez de terminer votre fonction par un "end".
- Code:
-
def refresh
self.contents.clear
draw_text(0,0,contents_width, line_height, "coucou", 1)
end
Cette method permet de rafraichir à certain moment votre fenêtre.
- Code:
-
def refresh
Comme plus haut, on créée la method refresh.
- Code:
-
self.contents.clear
Cette ligne sert à effacer le Bitmap de la fenêtre (je vous parlerais plus en détail du Bitmap dans un prochain tuto retenez juste que ça efface le contenue de votre fenêtre)
- Code:
-
draw_text(0,0,contents_width, line_height, "coucou", 1)
"draw_text" est une method de Window_Base et qui sert à afficher du texte.
on lui passe en argument:
- Code:
-
(0,0,contents_width, line_height, "coucou", 1)
donc dans l'ordre ça donne
- position "x" du texte dans la fenêtre
- position "y" du texte dans la fenêtre
- largeur du texte dans la fenêtre
- longueur du texte dans la fenêtre
- texte à afficher
- alignement (0 => alignement a gauche, 1 => centré, 2 => alignement à droite)
(contents_width et line_height sont des method de Window_Base)
(contents_width retourne la largeur de la fenêtre, line_height retourne la valeur 24 (écart normale entre chaque ligne dans RM))
maintenant vous pouvez terminer votre method avec end
- Code:
-
def tuto_draw
draw_text(0,line_height,contents_width, line_height, @text, 1)
end
- Code:
-
def tuto_draw
Pas besoin de réexpliquer
- Code:
-
draw_text(0,0,contents_width, line_height, @text, 1)
pareil que ci-dessus mais cette fois on intègre notre variable "@text" que l'on a créée plus haut.
(on ce serviras de cette method un peu plus tard)
maintenant vous pouvez terminer votre method avec end puis votre class de la même façon.
3) Creation de Scene_Testmaintenant que notre fenêtre est terminée il faut pouvoir l'afficher donc c'est partie:
- Code:
-
#===============================================================================
class Scene_Test < Scene_Base
#===============================================================================
def start
super
create_window_test
end
#-------------------------------------------------------------------------------
def update
super
if Input.trigger?(:B)
return_scene
Sound.play_cancel
end
if Input.trigger?(:C)
@window_test.tuto_draw
end
end
#-------------------------------------------------------------------------------
def create_window_test
@window_test = Window_Test.new
end
end
Je vais aussi vous décortiquer tous ça
- Code:
-
class Scene_Test < Scene_Base
Vous connaissez déjà
- Code:
-
def start
super
create_window_test
end
- Code:
-
def start
Vous connaissez déjà(sachez juste que la method "start" est obligatoire dans les scènes cette method est exécuter automatiquement des que l'on appel la scène)
- Code:
-
super
idem
- Code:
-
create_window_test
appel de la method "create_window_test" que l'on verras plus tard
- Code:
-
def update
super
if Input.trigger?(:B)
return_scene
Sound.play_cancel
end
if Input.trigger?(:C)
@window_test.tuto_draw
end
end
Ça ce complique un peu.
- Code:
-
if Input.trigger?(:B)
return_scene
Sound.play_cancel
end
le "if" est une condition (Je vous expliquerais plus en détail dans le prochain tuto)
en claire ce morceau veut dire:
si la touche B est appuyée alors
appel de la method "return_scene" (qui permet de retourner à la scène précédente)
jouer le sons cancel
end (ce qui permet de dire que c'est la fin du "if")
- Code:
-
if Input.trigger?(:C)
@window_test.tuto_draw
end
C'est presque pareil:
si la touche C est appuyée alors
appel de la method tuto_draw (vous vous en souvenez de cette method ??)(vous verrez juste en dessous d'où viens la variable de class)
end (ce qui permet de dire que c'est la fin du "if")
(Quand j'ai cité la touche B et C ça ne correspond pas au touche B et C du clavier mais celle défini dans RM (faite F1 quand votre jeu est lancé pour les changer))
N'oubliez pas de finir la method avec end
Et pour finir:
- Code:
-
def create_window_test
@window_test = Window_Test.new
end
là on créé la variable de class que l'on a vus plus haut et on lui dis qu'elle est égale à "nom de notre class fenêtre".new
rappelez vous au tout début du tuto quand je vous expliquais ce que c’était que les class, je vous avais parlé d'un constructeur et bah le .new est ce constructeur.(en claire c'est lui qui vas rendre réelle notre fenêtre)
plus qu'à terminer notre method et notre class avec des end
Et voila pour la partie code maintenant il faut pouvoir appeler notre scène.
Pour cela il faut créée un événement sur la map et dans la partie script(le dernier du 3eme onglet) mettre:
- Code:
-
SceneManager.call(Scene_Test)
Je vous laisse admirez le travail.
Petit travaux pratiqueAvec ce que je vous est déjà appris y'a moyen de faire quelque petit truc sympas.
Testé et des que vous êtes arrivé à un résulta sympas posté le code et je vous dirais ce qui est bien et pas bien dans votre code.
FINJ'attends vos retour avec impatience.
Ps: si vous avez des question n'hésitez pas à les poster en commentaire, il n'y à jamais de question bête
(je ne veux pas qu'on spam ma boite à MP ^^)
Ps2: pour mon prochain tuto je compte ajouter a la fin une partie réserver à vos proposition. Par exemple: si vous voulez que j'explique l'affichage d'image ou quelque chose de spécifique.
ps3: Les tutos continuerons en fonction de l’attrait pour celui ci donc si vous êtes intéressé n'hésitez pas à me le faire savoir dans les commentaires.
ps4: Le mot method est orthographié de cette manière car c'est le mot anglais en français on dis fonction.