[]Ruby,
Tuto n°4
[]Menu de Choix
Auteur : Moi
Attention ! Il est nécessaire d'avoir un minimum de connaissance en Ruby pour comprendre ce tuto !
C'est pourquoi je conseillerais au débutant complet de commencer par => là <= 1 - Qu'est-ce qu'un Menu de Choix ?Dans
RMXP, un
Menu de Choix permet au joueur de sélectionner une option parmi une liste. Une action est ensuite exécutée en fonction de l'option. Cela paraît simple, mais réussir un bon
Menu de Choix en
Ruby sans bugs n'est pas à la portée de n'importe quel débutant.
2 - Utilisation d'une Classe Définie :Les créateurs de RMXP ont intégrés un script qui va nous être très utile, il s'agit de
Window_Command. Ce script va automatiquement créer une fenêtre avec nos choix. A nous ensuite de l'exploiter.
3 - Méthodes et Propriétés :- Code: Tout sélectionner
@commandes = Window_Command.new(largeur, [commandes])
Appel de la classe
Window_Command avec des arguments obligatoires :
-
largeur correspond à la largeur de la fenêtre
-
commandes correspond à un tableau de chaînes de caractères qui seront les commandes
- Code: Tout sélectionner
@commandes.index
Propriété très utile, elle renvoie l'index (
la position) du curseur sur le menu. Elle servira notament pour définir ce qui va se passer lorsqu'on fait le choix d'une option.
- Code: Tout sélectionner
@commandes.disable_item(index)
Permet de griser un choix défini par son
index.
- Code: Tout sélectionner
return
return expr
return n'est pas une propriété de
Window_Command, il peut être utilisé n'importe où.
Il permet de quitter la méthode en cours (
possibilité d'ajouter une valeur de renvoie expr).
return est indispensable pour faire un bon menu.
Vous comprendrez dans le script d'exemple.
4 - Petit script d'exemple :Le script est appelé avec :
- Code: Tout sélectionner
$scene = Scene_Choix.new(index=0)
index peut être spécifié si désiré, il doit correspondre à un
nombre entre 0 et 5, et représente l'index du menu.
Il n'est pas très impressionant : il affiche une fenêtre très simple avec 5 choix, mais lisez bien les commentaires et il ne devrait pas y avoir de problèmes.
Voici le script :- Code: Tout sélectionner
# Définition de la Classe
# Cette classe sera appelée par le code :
# $scene = Scene_Choix.new
# dans "Insérez un script" d'un event par exemple
class Scene_Choix
# Méthode d'initialisation
def initialize(index = 0)
# Comme vu dans le tuto sur les Viewports,
# on peut spécifier un argument entre parenthèses.
# Ici, l'argument sera 0 s'il n'a pas été
# spécifié lors de l'appel de la classe.
# On stocke l'argument dans une variable d'instance
@index = index
# Fin de la méthode d'initialisation
end
# Méthode principale
def main
# On appelle le script Spriteset_Map qui permet d'avoir
# une image de la map
@fond_map = Spriteset_Map.new
# On définit des variables locales qui
# permettent de faire un raccourci des
# commandes de notre menu
#---------------------------------------
# Précision : N'oubliez pas les bases !
# Mettez les chaînes de caractère entre
# les "" !
s1 = "Premier"
s2 = "Deuxième"
s3 = "Troisième"
s4 = "Quatrième"
s5 = "Cinquième"
s6 = "Sixième"
# On appelle maintenant le script Window_Command
# qui nous permet de faire rapidement une liste
# de commandes.
#------------------------------------------------
# Précision : ne vous trompez pas :
# Window_Command.new(largeur, [commandes])
@commandes = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
# On n'oublie pas de "forcer" l'index
# de cette liste en fonction de notre
# argument de classe
@commandes.index = @index
#-------------------------------------------
# Ce morceau de code est présent dans toutes
# les Scenes
#-------------------------------------------
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
#---------------------
# On efface la fenêtre des commandes
# Ainsi que le fond de la map
@commandes.dispose
@fond_map.dispose
# Fin de la méthode principale
end
# Méthode e mise à jour
def update
# On met à jour la fenêtre des commandes
@commandes.update
# A partir de là, on définit les
# actions qui vont être réalisées
# suivant l'appui sur une touche
# Si la touche X ou 0 est pressée
if Input.trigger?(Input::B)
# On joue l'effet sonore d'annulation
$game_system.se_play($data_system.cancel_se)
# Et on retourne à la Map
$scene = Scene_Map.new
end
# Si la touche Entrée est pressée
if Input.trigger?(Input::C)
#--------------------------------------------
# On exécute une action différente suivant
# l'index de la fenêtre.
# Pour cela, on utilise le branchement
# conditionnel "case" qui permet
# d'éviter une série de "if / elsif"
# trop longue à écrire.
#--------------------------------------------
# En fonction de l'index de la fenêtre :
case @commandes.index
# Si l'index est :
when 0
# Effet sonore de validation
$game_system.se_play($data_system.decision_se)
# Ici, mettez la commande que vous voulez
p "La commande " + @commandes.index.to_s + " est active."
when 1
# Effet sonore de validation
$game_system.se_play($data_system.decision_se)
# Ici, mettez la commande que vous voulez
p "La commande " + @commandes.index.to_s + " est active."
when 2
# Effet sonore de validation
$game_system.se_play($data_system.decision_se)
# Ici, mettez la commande que vous voulez
p "La commande " + @commandes.index.to_s + " est active."
when 3
# Effet sonore de validation
$game_system.se_play($data_system.decision_se)
# Ici, mettez la commande que vous voulez
p "La commande " + @commandes.index.to_s + " est active."
when 4 # セーブ
# Effet sonore de validation
$game_system.se_play($data_system.decision_se)
# Ici, mettez la commande que vous voulez
p "La commande " + @commandes.index.to_s + " est active."
when 5 # ゲーム終了
# Effet sonore de validation
$game_system.se_play($data_system.decision_se)
# Ici, mettez la commande que vous voulez
p "La commande " + @commandes.index.to_s + " est active."
end
# Quitte la méthode
# A ne pas oublier pour ne pas avoir de bugs !
return
end
# Fin de la méthode de mise à jour
end
# Fin de la Classe
end
Ce script n'est pas difficile en soit, mais si vous bloquez sur quelque chose, il ne faut pas hésiter à poser des questions !Je compléterais bientôt ce tuto avec un autre sur les techniques pour faire un menu complexe.Laissez vos commentaires et surtout ne vous découragez pas 