Bonjour à tous, et toutes.
Je vais aujourd'hui écrire un tutorial sur comment faire un menu de choix en image, ou plus simplement, comment passer d'une fenêtre de choix de base (Window_Command) à une fenêtre de choix en images créées par vos soins.
Je ne compte pas vous fournir d'images, à vous de vous débrouiller.
D'abord, voici une scene quelconque :
- Code:
-
class Scene_xxx
def main
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
end
def update
end
end
Inutile n'est-ce pas ?
ETAPE 1 :
Et bien ajoutons une fenêtre de commandes :
- Code:
-
class Scene_xxx
def main
s1 = "xxx"
s2 = "xxx"
s3 = "xxx"
@command_window = Window_Command.new(160,[s1, s2, s3])
@command_window.back_opacity = 100
@command_window.y = 0
@command_window.x = 0
@command_window.active = true
@command_window.visible = true
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@command_window.dispose
end
def update
@command_window.update
end
end
Comme vous pouvez le remarquer, une scene comme celle-ci reste inutile .. Dommage, va falloir continuer de lire ^^
ETAPE 2 :
Ajoutons donc les commandes de chaque choix
- Code:
-
class Scene_xxx
def main
s1 = "xxx"
s2 = "xxx"
s3 = "xxx"
@command_window = Window_Command.new(160,[s1, s2, s3])
@command_window.back_opacity = 100
@command_window.y = 0
@command_window.x = 0
@command_window.active = true
@command_window.visible = true
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end #end : if
end #end : loop do
Graphics.freeze
@command_window.dispose
end #end : main
def update
@command_window.update
if Input.trigger?(Input::C) #Si la touche C (ENTER) est appuyée
case @command_window.index #Dans le cas de l'index de la fenêtre de commande (les choix)
when 0 #1er choix
$game_system.se_play($data_system.validation_se)
$scene = Scene_xxxx.new
when 1 #2e choix
$game_system.se_play($data_system.validation_se)
$scene = Scene_xxxxx.new
when 2 #3e choix
$game_system.se_play($data_system.validation_se)
$scene = Scene_xxxxxx.new
end #end : case
end #end : if
if Input.trigger?(Input::B) #Si la touche B (ECHAP) est appuyée
$game_system.se_play($data_system.cancel_se)
$scene = Scene_xx.new
return
end #end : if
end #end : update
end #end : class
Comme vous avez pu le remarquer, créer des commandes tiens en quatre choses :
D'abord créer la window_command, pour cela : [étape1]
- Code:
-
s1 = "xxx"
s2 = "xxx"
s3 = "xxx"
@command_window = Window_Command.new(160,[s1, s2, s3])
@command_window.back_opacity = 100
@command_window.y = 0
@command_window.x = 0
@command_window.active = true
@command_window.visible = true
Je crée des choix, s1, s2 et s3 [Ce qui n'est pas obligatoire, c'est juste pour simplifier en mettant une variable dans le tableau de Window_Command]
Je crée @command_window qui sera ma fenêtre dans cette scene [On peut utiliser un nom au choix ^^]
Ensuite j'ai décidé de définir l'opacité de son fond à une valeur de 100 [sachant que 0 signifie transparent et 255 signifie opaque]
Ensuite je détermine la position x y de la fenêtre, l'axe x étant l'axe horizontal et l'axe y l'axe vertical. [L'écran dans RPG Maker XP est de 640*480 pixels ou 800*600 si on a appliqué le patch]
Enfin, je détermine si la fenêtre est ou non visible et active, ici
- Code:
-
@command_window.active = true
@command_window.visible = true
ont la valeur true, donc la fenêtre est visible et active.
Une fois ceci fait, il reste trois choses à faire :
D'abord, ajouter la ligne
- Code:
-
@command_window.dispose
Qui permettra au logiciel, une fois qu'il aura cassé la boucle dans le main, donc quand il quittera, de supprimer la fenêtre ^^
Et ensuite, ajouter la ligne
- Code:
-
@command_window.update
Celle-ci mettra à jour la fenêtre dans l'update qui se produit en boucle, donc en clair, la fenêtre sera constamment mise à jour, ce qui nosu permettra d'admirer l'application de changements, ici le changement de choix [Si on laissait la fenêtre visible, on verrait en plus le curseur clignoter]
Enfin il y a les commandes des choix ^^ [etape 2]
Ici j'ai mis :
- Code:
-
if Input.trigger?(Input::C) #Si la touche C (ENTER) est appuyée
case @command_window.index #Dans le cas de l'index de la fenêtre de commande (les choix)
when 0 #1er choix
$game_system.se_play($data_system.validation_se)
$scene = Scene_xxxx.new
when 1 #2e choix
$game_system.se_play($data_system.validation_se)
$scene = Scene_xxxxx.new
when 2 #3e choix
$game_system.se_play($data_system.validation_se)
$scene = Scene_xxxxxx.new
end #end : case
end #end : if
if Input.trigger?(Input::B) #Si la touche B (ECHAP) est appuyée
$game_system.se_play($data_system.cancel_se)
$scene = Scene_xx.new
return
end #end : if
Alors tout est écrit en commentaire ^^
Il suffit de lire
Pour précision, dans le when, la valeur de départ est 0, et le choix de départ est 0, donc pensez dans votre tête que le premier choix est le choix 0
[ETAPE 3]
Maintenant, passons au but de ce tutorial.
Nous allons désactiver l'affichage de la fenêtre mais pas son fonctionnement.
Pour cela, je passe la fenêtre en
- Code:
-
@command_window.visible = false
.
Maintenant, je vais me permettre d'ajouter les images.
Pour cela je rajoute un Sprite et son Bitmap dans la scene et je modifie l'image en fonction du choix en cours :
- Code:
-
class Scene_xxx
def main
@sprite = Sprite.new #Création du Sprite
@sprite.bitmap = RPG::Cache.picture("Choix1.png") #Choix de l'image (premier choix ici par défaut)
s1 = "xxx"
s2 = "xxx"
s3 = "xxx"
@command_window = Window_Command.new(160,[s1, s2, s3])
@command_window.back_opacity = 100
@command_window.y = 0
@command_window.x = 0
@command_window.active = true
@command_window.visible = false
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@command_window.dispose
@sprite.dispose
@sprite.bitmap.dispose #ces deux lignes sont obligatoires pour ne pas rencontrer de problème en quittant la scene ^^
end
def update
@command_window.update
@sprite.update
#On ne met pas de @sprite.bitmap.update car l'image changera
case @command_window.index #Dans le cas de l'index de la fenêtre (choix sélectionné)
when 0 #1er choix, première image ^^
@sprite.bitmap = RPG::Cache.picture("Choix1.png")
when 1 #2e choix, deuxième image ^^
@sprite.bitmap = RPG::Cache.picture("Choix2.png")
when 2 #3e choix, troisième image ^^
@sprite.bitmap = RPG::Cache.picture("Choix3.png")
end
if Input.trigger?(Input::C)
case @command_window.index
when 0
$game_system.se_play($data_system.validation_se)
$scene = Scene_xxxx.new
when 1
$game_system.se_play($data_system.validation_se)
$scene = Scene_xxxxx.new
when 2
$game_system.se_play($data_system.validation_se)
$scene = Scene_xxxxxx.new
end
end
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_xx.new
return
end
end
end
Maintenant la question que tout le monde se pose :
Comment ça marche ?
C'est simple :
Aux lignes
- Code:
-
case @command_window.index
when 0
@sprite.bitmap = RPG::Cache.picture("Choix1.png")
when 1
@sprite.bitmap = RPG::Cache.picture("Choix2.png")
when 2
@sprite.bitmap = RPG::Cache.picture("Choix3.png")
end
sont indiquées les noms des images pour chaque choix.
Quand on change de choix, l'affichage se met automatiquement à jour et l'image appropriée apparaît.
Petite remarque :
Les modules de base permettent d'appeler chacun des dossiers présents à la base,
on retrouve donc ici le module
- Code:
-
RPG::Cache.picture
Qui va chercher l'image dans le dossier Pictures,
Cependant si l'on n'a pas besoin de rendre l'image transparente, on peut stocker le fichier dans un autre dossier, par exemple dans Pictures/Menu Titre.
Pour cela, quand on choisit l'emplacement de l'image, on va appeler le même module mais appeler son sous-répertoire Menu Titre,
En clair :
- Code:
-
RPG::Cache.picture("Menu_titre/image")
Pour conclure, on peut donc dire qu'ajouter à une scene avec menu la troisième étape permettra de passer de la fenêtre à un affichage en image.
DEMO :
Je vous laisse une démo du Scene_Title en image.
ici
[À savoir, le scene_title m'a demandé une condition supplémentaire puisqu'il y a changement de couleur si une sauvegarde est présente ou non ^^]
Voilà pour ce cours ^^
Je rédigerais un tutoriel sur la création de fenêtres pour compléter vos scenes, je commencerai notamment par une fenêtre pour afficher une simple variable de jeu ^^
Je décortiquerai Window_Gold et je vous donnerais l'exemple d'une fenêtre affichant une variable sur la même base.
Voilà voilà ^^
Enjoy,
3dward.