Accueil du SiteAccueil du Site  AccueilAccueil  Dernières imagesDernières images  RechercherRechercher  ConnexionConnexion  S'enregistrerS'enregistrer  



Le Deal du moment : -43%
-100€ Pack rééquipement Philips Hue ...
Voir le deal
129.99 €

Partagez
 

 [XP]Modification du menu

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Creme brulée
Chevalier Mage (niveau 4)
Chevalier Mage (niveau 4)
Creme brulée

Masculin
Messages postés : 465
Date d'inscription : 04/02/2012
Jauge LPC :
[XP]Modification du menu 891527140010 / 10010 / 100[XP]Modification du menu 8915271400

[XP]Modification du menu Membre10
[XP]Modification du menu Altrui10
[XP]Modification du menu Partag10
[XP]Modification du menu Collec10
[XP]Modification du menu Collec11
[XP]Modification du menu Collec12


[XP]Modification du menu Empty
MessageSujet: [XP]Modification du menu   [XP]Modification du menu EmptyMar 11 Déc 2012 - 18:20

Bonjour à tous et bonjour à toutes.
Alors aujourd'hui j'ai décidé de vous faire part de mes connaissances (très faibles ^^) sur des modifications mineures du menu, mais qui peuvent être utiles.

Sommaire :
1. Modification des choix : objets, compétences, équiper, etc...
2. Suppression des fenêtres
3. Modification des valeurs x, y, largeur et hauteur
4. Modification de l'opacité, et un petit ajout
5. Exercice avec la Scene_End (pour quitter)


I Modification des choix : objets, compétences, équiper, etc...

Prenons le script du menu :
Code:
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs menu screen processing.
#==============================================================================

class Scene_Menu
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Make command window
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Statut"
    s5 = "Sauvegarder"
    s6 = "Quitter le jeu"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    # If number of party members is 0
    if $game_party.actors.size == 0
      # Disable items, skills, equipment, and status
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    # If save is forbidden
    if $game_system.save_disabled
      # Disable save
      @command_window.disable_item(4)
    end
    # Make play time window
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    # Make steps window
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    # Make gold window
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    # Make status window
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @command_window.update
    @playtime_window.update
    @steps_window.update
    @gold_window.update
    @status_window.update
    # If command window is active: call update_command
    if @command_window.active
      update_command
      return
    end
    # If status window is active: call update_status
    if @status_window.active
      update_status
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # If command other than save or end game, and party members = 0
      if $game_party.actors.size == 0 and @command_window.index < 4
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Branch by command window cursor position
      case @command_window.index
      when 0  # item
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Item.new
      when 1  # skill
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # equipment
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # status
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 4  # save
        # If saving is forbidden
        if $game_system.save_disabled
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to save screen
        $scene = Scene_Save.new
      when 5  # end game
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to end game screen
        $scene = Scene_End.new
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when status window is active)
  #--------------------------------------------------------------------------
  def update_status
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Make command window active
      @command_window.active = true
      @status_window.active = false
      @status_window.index = -1
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Branch by command window cursor position
      case @command_window.index
      when 1  # skill
        # If this actor's action limit is 2 or more
        if $game_party.actors[@status_window.index].restriction >= 2
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to skill screen
        $scene = Scene_Skill.new(@status_window.index)
      when 2  # equipment
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to equipment screen
        $scene = Scene_Equip.new(@status_window.index)
      when 3  # status
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to status screen
        $scene = Scene_Status.new(@status_window.index)
      end
      return
    end
  end
end

On va s'intéresser aux lignes 20 à 26.
On a ligne 20 à 25 :
Code:
s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Statut"
    s5 = "Sauvegarder"
    s6 = "Quitter le jeu"
C'est le nom des commandes. On va dire qu'on veut créer une commande Quêtes (waouh le super exemple ^^)
On rajoute un s7, après le s6 et on écrit :
Code:
s7 = Quêtes
Ce qui nous donne :
Code:
s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Statut"
    s5 = "Sauvegarder"
    s6 = "Quitter le jeu"
    s7 = "Quêtes"
Mais ce n'est pas fini, ligne 26 il y a :
Code:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
Et ça s'arrête à s6. Mais vu qu'on a ajouté une commande il faut aussi la rajouter ici :
Code:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])

Une foix créée il faut que quand on clique dessus ça nous envoie à la scene quete.
Ca se passe ligne 124 à 167 :
Code:
case @command_window.index
      when 0  # item
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Item.new
      when 1  # skill
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # equipment
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # status
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 4  # save
        # If saving is forbidden
        if $game_system.save_disabled
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to save screen
        $scene = Scene_Save.new
      when 5  # end game
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to end game screen
        $scene = Scene_End.new
      end
On a toutes les commandes (item, skill, etc...) et on doit rajouter la nôtre. Donc en dessous de $scene = Scene_End.new on rajoute ceci :
Code:
when 6  # quest
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to end game screen
        $scene = Scene_Quete.new
$scene = Scene_Quete.new : on nous envoie à la scene. Elle peut s'appeler autrement que Scene_Quete. C'est en fonction de la scene à laquelle vous renvoyez. Le nom de la scene est écrite. Dans le when 5 c'était Scene_End. Si tu renvoies à une scene il faut écrire :
Code:
$scene = Le_nom_de_ta_scene.new

Si on aurait voulu retirer une commande, j'aurais enlever le s6 (par exemple) ligne 25, ainsi que le s6 ligne 27. Ce qui aurait donner:
Code:
def main
    # Make command window
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Statut"
    s5 = "Sauvegarder"
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
Et j'aurais supprimer :
Code:
when 5  # end game
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to end game screen
        $scene = Scene_End.new

Voilà pour les commandes, normalement maintenant, si tu cliques sur "Quêtes" ça va te renvoyer à la Scene_Quete (ou pas ^^ tout dépend si tu as un script avec le nom de Scene_Quete)

/!\ Remarque :
Vous avez dû voir qu'il n'y a que 6 when pour 7 commandes.
C'est car :
commande 1 = when 0
commande 2 = when 1
etc...


II Suppression des fenêtres

Bon maintenant que vous avez fait le grand 1 vous devez avoir ceci :
Spoiler:
Ce n'est pas beau, vous aimeriez bien que ça ne se chevauche pas. Pour cela il faudrait enlever la fenêtre du temps, mais comment faire ?

Ligne 42 à 57 :
Code:
# Make play time window
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
    # Make steps window
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    # Make gold window
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
    # Make status window
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
Ce sont toutes les fenêtres actives (il y en a une avant qui est @command_window pour les commandes) Et donc on veut supprimer le temps. On regarde dans les noms et on voit :
Code:
@playtime_window = Window_PlayTime.new
Parfait, on enlève ça et c'est bon ? Et bien non il faut aussi enlever les commandes qui suivent, donc on enlève :
Code:
@playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
Et ce n'est pas fini, plus loin, ligne 76 à 80, il faut aussi enlever la commande correspondante, soit @playtime_window.dispose. Même chose ligne 87 à 91.
Une fois toutes enlevées on obtient ça :
Spoiler:
Et voilà nickel.


III Modification des valeurs x, y, largeur et hauteur

C'est bien mais pas tout à fait ce que l'on souhaite. On voudrait avoir la fenêtre d'or avant celle des pas. On va donc dans le script ligne 43 à 49 :
Code:
@steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320
    # Make gold window
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416
On a vu qu'on pouvait les supprimer, maintenant on va les modifier.
1. x et y
x = axe horizontal (on ne s'en servira pas mais ça marche pareil que y)
y = axe vertical
On remarque qu'on n'a pas la hauteur et la largeur, c'est car elles sont définies dans la class Window (ici Window_Steps et Window_Gold), j'y reviendrai après.
Donc on va modifier la valeur y pour avoir l'argent au dessus des pas.
Il faut donc @gold_window.y > @steps_window.y
Après plusieurs tests, je trouve les valeurs pour modifier :
Code:
@gold_window.y = 320
Code:
@steps_window.y = 384
Ce qui donne :
Spoiler:
Et je vais modifer la place y des commandes en ajoutant cette ligne:
Code:
@command_window.y = 20
En dessous de :
Code:
@command_window.index = @menu_index
Comme ceci :
Code:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
    @command_window.index = @menu_index
    @command_window.y = 30
Ce qui donne :
Spoiler:

2. hauteur et largeur
C'est une fenêtre comme Window_Gold, il faut aller dans le script Window_Gold et modifier ces 2 valeurs ligne 12 :
Code:
super(0, 0, 160, 64)
160 = largeur et 64 = hauteur
Et ce sera pareil pour les autres fenêtres (Window_MenuStatus, Window_Skill, etc...)

Maintenant passons à l'étape suivante.

/!\ Remarque :
x = axe horizontal
y = axe vertical

IV Modification de l'opacité, et un petit ajout

C'est bien comme ça mais le fond noir ne me plait pas. Je vais d'abord modifier l'opacité de toutes les fenêtres pour qu'elles ne soient plus opaques.
On modifie l'opacité des commandes, donc en dessous de :
Code:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
    @command_window.index = @menu_index
    @command_window.y = 30
On rajoute @command_window.back_opacity = 150
255 = opaque, 0 = transparent, à vous de régler après.
Ce qui donne :
Code:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
    @command_window.index = @menu_index
    @command_window.y = 30
    @command_window.back_opacity = 150
Pareil pour la fenêtre de l'argent :
Code:
@gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 320
    @gold_window.back_opacity = 150
Des pas :
Code:
@steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 384
    @steps_window.back_opacity = 150
Et des héros :
Code:
@status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    @status_window.back_opacity = 150
Ce qui donne :
Spoiler:
Ca ne change pas grand chose. Donc on va mettre un fond, deux choix :
1. La carte en fond
En dessous de def main on rajoute
Code:
@spriteset = Spriteset_Map.new
Il ne faut pas oublier de rajouter sous la ligne 83:
Code:
@spriteset.dispose
et sous la ligne 93
Code:
@spriteset.update
Ce qui donne :
Spoiler:
Ca ressemble enfin à quelque chose de bien.

2. Une image en fond
Au lieu de mettre :
Code:
@spriteset = Spriteset_Map.new
On met :
Code:
@spriteset = Spriteset.new
    @spriteset.bitmap = RPG::Cache.picture("nom de l'image")
Remplacer "nom de l'image" par le nom de votre image de le dossier picture (il faut garder les "")
Ce qui peut donner :
Code:
def main
    @spriteset = Sprite.new
    @spriteset.bitmap = RPG::Cache.picture("fond menu")
Auquel cas, dans le dossier picture il y aura une image nommée fond menu.
Et bien sûr il ne faut pas oublier de rajouter sous la ligne 83:
Code:
@spriteset.dispose
et sous la ligne 93
Code:
@spriteset.update
Ce qui donne :
Spoiler:
Voilà enfin ce que je voulais ^^


V Exercice avec la Scene_End

Maintenant vous allez pouvoir voir si vous saurez refaire ce que je vous ais appris avec une autre scene.
Prenez la Scene_End :
Spoiler:
Elle est pauvre et moche. Et bien vous allez essayer de la faire comme moi :
Spoiler:
Prenez n'importe quelle image de fond.

Voilà voilà. C'était mon premier tuto, soyez indulgent.
Si je n'ai pas été clair dites le moi. Si vous avez des questions dites les moi aussi.
Merci de bien vouloir commenter pour me dire si ça a été utile, comment je peux l'améliorer.

A plus, et j'espère que ce tuto sera utile Smile


Dernière édition par Creme brulée le Mar 11 Déc 2012 - 19:10, édité 1 fois
Revenir en haut Aller en bas
Invité
Invité
Anonymous


[XP]Modification du menu Empty
MessageSujet: Re: [XP]Modification du menu   [XP]Modification du menu EmptyMar 11 Déc 2012 - 19:06

Je n'ai pas tout lut, mais pour ce que j'ai retenu c'est clair et bien décrit, la présentation est très jolie.
Merci du partage, je t'ajoute des points. =)
Revenir en haut Aller en bas
Wayk
Mage (niveau 5)
Mage (niveau 5)
Wayk

Messages postés : 344
Date d'inscription : 07/10/2012
Jauge LPC :
[XP]Modification du menu 891527140032 / 10032 / 100[XP]Modification du menu 8915271400

[XP]Modification du menu Membre-assidu_imagesia-com_1ped_large
[XP]Modification du menu 50000-me-message_imagesia-com_41yb_large
[XP]Modification du menu Event-makeur_imagesia-com_1pe8_large


[XP]Modification du menu Empty
MessageSujet: Re: [XP]Modification du menu   [XP]Modification du menu EmptyMar 11 Déc 2012 - 19:17

Merci beaucoup CB !
Revenir en haut Aller en bas
Creme brulée
Chevalier Mage (niveau 4)
Chevalier Mage (niveau 4)
Creme brulée

Masculin
Messages postés : 465
Date d'inscription : 04/02/2012
Jauge LPC :
[XP]Modification du menu 891527140010 / 10010 / 100[XP]Modification du menu 8915271400

[XP]Modification du menu Membre10
[XP]Modification du menu Altrui10
[XP]Modification du menu Partag10
[XP]Modification du menu Collec10
[XP]Modification du menu Collec11
[XP]Modification du menu Collec12


[XP]Modification du menu Empty
MessageSujet: Re: [XP]Modification du menu   [XP]Modification du menu EmptyMar 11 Déc 2012 - 19:21

De rien Wink
Si ça peut aider.
Revenir en haut Aller en bas
Contenu sponsorisé




[XP]Modification du menu Empty
MessageSujet: Re: [XP]Modification du menu   [XP]Modification du menu Empty

Revenir en haut Aller en bas
 
[XP]Modification du menu
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu]Modification du menu de base
» [RMXP] Modification du script Ring Menu
» Menu Parchemin 1.0 (Menu Principal personnalisé)
» modification de commande en combat
» Besoin d'une modification sur un tileset

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le Palais Créatif :: ~ APPRENTISSAGE ~ :: Initiation :: Systèmes-
Sauter vers: