Heures au format UTC + 1 heure [ Heure d’été ]




Publier un nouveau sujet Répondre au sujet  [ 13 messages ]  Aller à la page 1, 2  Suivant
Auteur Message
 Sujet du message: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 22 Sep 2007, 17:59 
Ancien membre du staff
Ancien membre du staff

Inscrit le: 24 Sep 2006, 00:00
Messages: 522
Points d'aide: 0/60

Créations :

Voir ses créations

[]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 => <=


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 n41


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 22 Sep 2007, 20:00 
Ancien membre du staff
Ancien membre du staff

Inscrit le: 07 Sep 2006, 00:00
Messages: 1165
Points d'aide: 0/60

Créations :

Voir ses créations

Je t'aurais bien donné des PA, mais c'est déjà fait, en plus tu es du même étage que moi Smile

Je te dis encore un gros bravo, parce que c'est vraiment très explicite et ça me fera nettement progresser, encore merci à toi l'ami Smile !


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 22 Sep 2007, 20:03 
Ancien membre du staff
Ancien membre du staff

Inscrit le: 24 Sep 2006, 00:00
Messages: 522
Points d'aide: 0/60

Créations :

Voir ses créations

Justement, comme tu utilises mes tutos, je voudrais savoir comment tu fais une fois que tu as lu le sujet (tu copie/colle et tu testes, ou autre chose ...).
Et aussi est-ce que tu aurais une idée particulière sur laquelle je pourrais faire un tuto ?

Sinon, merci n41


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 22 Sep 2007, 20:51 
Ancien membre du staff
Ancien membre du staff

Inscrit le: 07 Sep 2006, 00:00
Messages: 1165
Points d'aide: 0/60

Créations :

Voir ses créations

En fait, ce que j'aime de tes tutos, c'est que tu expliques les fonctions, ce qui pour moi est vraiment quelque chose qui est important.

J'essaie aussi de comprendre, dans le script que tu fournis, pourquoi as-tu placé ces éléments à cette place là et comme tu expliques les fonctions je peux alors y travailler.

Pour des idées, moi je sais pas où tu en es, c'est à toi de voir l'ami Smile


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 22 Sep 2007, 21:20 
Artisan (Nv 1)

Inscrit le: 16 Aoû 2006, 00:00
Messages: 117
Points d'aide: 0/60

Créations :

Voir ses créations

Moi je dis super tuto! j'ai lue les précédents tuto sur le Ruby et je connaît un minimum grâce à toi!

Thank you very much!! n14 n14


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 22 Sep 2007, 22:38 
Ancien membre du staff
Ancien membre du staff

Inscrit le: 24 Sep 2006, 00:00
Messages: 522
Points d'aide: 0/60

Créations :

Voir ses créations

Merci beaucoup à tous les 2 happy

Mario Bros, encore une question : est-ce que tu as déjà essayé de faire un script tout seul en rapport avec mes tutos ?


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 22 Sep 2007, 22:40 
Ancien membre du staff
Ancien membre du staff

Inscrit le: 07 Sep 2006, 00:00
Messages: 1165
Points d'aide: 0/60

Créations :

Voir ses créations

Non, je suis pas assez expérimenté.
Mais si je ferrais des modifications sur les scripts, je n'aurais aucun mal grâce à tes tutoriaux. Dès que je serai perfectionner, comme on le dit, je passerai à la fabrication de mes propres scripts Smile


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 23 Sep 2007, 06:29 
Villageois (Nv 2)

Inscrit le: 16 Jan 2007, 01:00
Messages: 37
Points d'aide: 0/60

Créations :

Voir ses créations

T'aurait pu trouver d'autres commandes pour le case/when, car la c'est completement inutile ^^.

Sinon pour les commentaires de cette partie du script

Code: Tout sélectionner
#-------------------------------------------
    # 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


Je me permet d'expliquer de quoi il s'agit reelement.

Code: Tout sélectionner
    # Ce morceau de code est présent dans toutes
    # les Scenes
    #-------------------------------------------
# Cette methode de la classe Graphics permet de fixer les graphismes de #la scene, il peut prendre 3 argument
#Graphics.transition([durée[, nom du fichier transition utilisé[, precision #du fondu]]])
    Graphics.transition
# "loop do" est utilisé pour creer une boucle a l'infini, la seule facon d'en #sortir et d'utiliser "break"
    loop do
#met a jour les éléments graphiques (tout ce qui est visuel en fait)
      Graphics.update
#met a jour la saisie
      Input.update
#renvoi vers la methode update de la classe dans laquelle on se trouve (Scene_Choix)
      update
#ouverture d'un boucle "if" (léquivalent d'une fourchette de condition en #event) qui prend 2 agrument (si ceci faire cela). la il s'agit de verifier #quelle est la scene courante($scene).
# donc,  if $scene != self est égal a si la scene courante est differente(!=) de la scene Scene_Choix(self fait reference a un objet de la classe dans laquelle on se trouve)
      if $scene != self
# si la condition est rempli on casse la boucle "loop do"
        break
#fermeture de la condition "if"
      end
#fermeture de la boucle "loop do" (retour au debut de cette boucle si la #condition n'a pas été remplie, sinon effectue la suite des commandes de #cette methode)
    end
#on fige les graphismes
    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


edit par dani_nouvel_star : merci d'avoir mis des commentaires pour expliquer certaines lignes. Ca peut surcharger un peu mais ça aide à comprendre. Il faudrait que tu indentes tes commentaires car le code devient illisible.
happy


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 23 Sep 2007, 09:57 
Ancien membre du staff
Ancien membre du staff

Inscrit le: 24 Sep 2006, 00:00
Messages: 522
Points d'aide: 0/60

Créations :

Voir ses créations

Mario Bros : d'accord, peut-être que mon prochain tuto pourra te permettre de réaliser ton propre menu.

Roshi, ce n'est pas très important les commandes que je met, c'est un détail. Mon script n'est pas fait pour servir dans le jeu, il montre simplement un exemple d'utilisation de mon tuto.

Pour les commentaires, je suis assez d'accord avec ce que tu me proposes (à quelques petits détails près), mais cette partie est assez complexe et en plus tu ne l'as pas expliqué facilement, donc étant donné que mes tutos s'adressent plus ou moins à des débutants, j'ai évité de les embrouiller avec ça.
Maintenant, si je fais un tuto sur les Scenes (en prévision) je détaillerais cette partie.
Pour finir, une remarque, les commentaires que tu me proposes on l'air copiés/collés, mais bon, si tu arrives à comprendre avec ça, c'est que tu as déjà un niveau pas mal, donc ce n'est pas très utile pour toi de suivre mes tutos happy

n41


Haut
 Profil  
 
 Sujet du message: Re: [Ruby] Tuto n°4 : Menu de Choix
MessagePublié: 23 Sep 2007, 10:16 
Ancien membre du staff
Ancien membre du staff
Avatar de l’utilisateur

Inscrit le: 23 Jan 2007, 01:00
Messages: 1006
Localisation: lyon
Niveau RPG Maker: novice
Points d'aide: 0/60

Créations :

Voir ses créations

Roshi a écrit:
T'aurait pu trouver d'autres commandes pour le case/when, car la c'est completement inutile ^^.


Dans tous ses tutos, The Metroid veut faire intéragir l'utilisateur du tutos et lui donner une vérification graphique pour montrer de manière visible que ça marche bien. C'est la particularité de ses tutos par rapport à certains autres.

EDIT par The Metroid : C'est exactement ça happy



edit par dani_nouvel_star : Je voudrais rajouter en même temps : je pense que The Metroid ne peut pas mettre de commentaire pour expliquer chaque ligne de code comme l'a fait Roshi donc si vous avez des questions sur la syntaxe du langage ruby n'hésitez pas à poster vos questions sur le topic du tuto correspondant.


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 13 messages ]  Aller à la page 1, 2  Suivant

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728