Sujet n°9625
Posté par Moy le 17 Avr - 12:09 (2011)
Titre : [Tuto/Script] Comment personnaliser son menu sous PSP DS
Comme certains veulent faire un nouveau menu pour leur jeu sous PSPDS mais ne savent pas scripter je vous propose un Tuto là dessus.
Le tutoriel sera composé de 2 grandes parties :

Qui comporteront chacune 3 parties :

Interface de jeu :
Script de base :
Tout d'abord il faut que vous alliez dans l'éditeur des scripts et dans le script : Interface_Echap* (ce script sert à avoir votre interface visible en jeu)
Logiquement vous avez ceci :
Interface_Echap*

 
Code:
 #==============================================================================
 # ■ Pokemon_Menu
 # Pokemon Script Project DS - Palbolsky 
 # 22/02/10
 #-----------------------------------------------------------------------------
 # Scène modifiable
 #-----------------------------------------------------------------------------
 # Interface graphique du menu principal accessible par échap
 #-----------------------------------------------------------------------------
 class Interface_Echap < Window_Base   
   include POKEMON_S  
   
   def initialize  
     super(0, 0, 640, 480)
     self.contents = Bitmap.new(width - 32, height - 32)   
     self.contents.font.name = $fontface    
     self.contents.font.size = $fontsize    
     self.opacity = 0     
     self.z = 21   
     @interface = Sprite.new         
     @interface.x = 13
     @interface.y = 227
     @interface.z = 20    
     text_interface
     apparence       
     refresh
   end     
   
   
     
   def dispose
     super 
     @interface.dispose
   end
   
   def apparence    
     if $color_menu == 1 or $color_menu == nil # Vert
       @string = "_vert"      
     elsif $color_menu == 0 # Bleu
       @string = "_bleu" 
     elsif $color_menu == 2 # Rouge
       @string = "_rouge"     
     end   
   end  
   def refresh     
     if $pokemon_party.size > 0
       @interface.bitmap = RPG::Cache.picture("Menu Echap/menu echap2" + @string)
     else
       @interface.bitmap = RPG::Cache.picture("Menu Echap/menu echap1" + @string)
     end    
     if $data_pokedex[0] == true
       @interface.bitmap = RPG::Cache.picture("Menu Echap/menu echap3" + @string)   
     end 
     if $game_switches[9] == true     
       @interface.bitmap = RPG::Cache.picture("Menu Echap/menu echap" + @string)   
     end  
   end    
   
   def text_interface    
     draw_text_interface(16, 253, 50, 25, "POKéDEX", 1)
     draw_text_interface(16, 293, 50, 25, "POKéMON", 1)
     draw_text_interface(16, 333, 50, 25, "SAC", 1) 
     draw_text_interface(1, 373, 80, 25, "POKéMATOS", 1)
     draw_text_interface(86, 253, 70, 25, Player.name, 1)
     draw_text_interface(96, 293, 50, 25, "SAUVER", 1)
     draw_text_interface(96, 333, 50, 25, "OPTIONS", 1)    
   end    
end


Explications :
 

Code:
def text_interface
draw_text_interface(x, y, 50, 25, "texte à écrire", 1)
end


Cette portion de code sert à écrire quelque chose sur l'interface.
« x » et « y » sont à remplacer par un nombre, ils gèrent l'emplacement du texte,« x » est l'abscisse et « y » est l'ordonnée
texte à écrireest à replacer par le texte qu'il faut écrire.
Notes :
Vous pouvez aligner plusieurs draw_text à la suite comme ceci :
 
Code:
def text_interface        
draw_text_interface(x, y, 50, 25, "texte à écrire", 1)
draw_text_interface(x, y, 50, 25, "texte à écrire", 1)
draw_text_interface(x, y, 50, 25, "texte à écrire", 1)
end



Code:
  def apparence
  if $color_menu == 1 or $color_menu == nil
  @string = "_couleur"
  elsif $color_menu == 0 
  @string = "_couleur2"
  end
end



Cette portion de code sert à changer la couleur du menu.
couleur1 est à changer par le nom de la première couleur.
couleur2 est à changer par le nom de la deuxième couleur.
/!\: il faut avoir fait plusieurs couleurs pour le menu et avoir renommé les images comme ceci :
nom du menu_couleur
Notes :
Vous pouvez ajouter ceci :

Code:
elsif $color_menu == 2/3/4/5 ... 
@string = "_couleur3/4/5/6 ..."



Comme cela :
 

Code:
def apparence
if $color_menu == 1 or $color_menu == nil
@string = "_couleur"
elsif $color_menu == 0
@string = "_couleur2" 
elsif $color_menu == 2/3/4/5 ...
@string = "_couleur3/4/5/6 ..."
end
end

Autant de fois que vous avez fait de couleur pour le menu.

Maintenant que tout ça est dit on peut passer à la partit personnalisation.

Personnalisation :


Code:
@gold_window = Window_Gold.new
@gold_window.x = x
@gold_window.y = y
@gold_window.z = 210
@gold_window.opacity = ?


Ce bout de code est à rajouter après @interface.z = 20.
Il sert à afficher l'argent du joueur.
Vous savez par quoi il faut changer « x » et « y » mais pas le « ? ».
Il faut le remplacer par un chiffre qui déterminera l'opacité (= transparence).
 

Code:
@playtime_window = Window_PlayTime.new
@playtime_window.x = x
@playtime_window.y = y
@playtime_window.z = 210
@playtime_window.opacity = 0



Ce bout de code est à rajouter après @interface.z = 20.
Il sert à afficher le temps que le joueur à passer à jouer.
Vous savez par quoi il faut changer « x », « y » et « ? ».

Interface de menu :
Script de base :
Tout d'abord il faut que vous alliez dans l'éditeur des scripts et dans le script : Interface_Menu* (ce script sert à avoir votre interface visible en jeu)
Logiquement vous avez ceci :
Interface_Menu*

 
Code:
 #==============================================================================
# ■ Pokemon_Menu
# Pokemon Script Project - Krosk
# 18/07/07
# 22/02/10 - Palbolsky
#-----------------------------------------------------------------------------
# Scène modifiable
#-----------------------------------------------------------------------------
# Menu principal accessible par échap
#-----------------------------------------------------------------------------

module POKEMON_S
  class Pokemon_Menu < Window_Base
    #--------------------------------------------------------------------------
    #
    #--------------------------------------------------------------------------
    def initialize(menu_index = 0)
      @menu_index = menu_index
      super(0,0,640,480)
      self.contents = Bitmap.new(width - 32, height - 32)     
      self.opacity = 0     
      self.z = 11     
    end     
    #--------------------------------------------------------------------------
    #
    #--------------------------------------------------------------------------
    def main
      @spriteset = Spriteset_Map.new
      @interface = Interface_Echap.new
     
      if POKEMON_S::VIEWER_TEAM
        @pkmn_team = Pokemon_Equipe.new
      end
     
      s1 = "POKéDEX"
      s2 = "POKéMON"
      s3 = "SAC"
      s4 = "DRESSEUR"
      s5 = "SAUVER"
      s6 = "RETOUR"
     
      @command_window = Window_Command.new(80, [s1, s2, s3, s4, s5, s6], $fontsizebig, 2, 14)
      @command_window.index = @menu_index
      @command_window.x = 480 - 169 - 123 + 200
      @command_window.y = 28 - 20
      @command_window.z = 10000
      @command_window.visible = false
     
      @selecteur = Sprite.new
      @selecteur.z = 200
      @selecteur.bitmap = RPG::Cache.picture("Select_menu")
     
      if @command_window.index == 0
        @selecteur.x = 24
        @selecteur.y = 271 
      elsif @command_window.index == 1
        @selecteur.x = 24
        @selecteur.y = 313
      elsif @command_window.index == 2
        @selecteur.x = 24
        @selecteur.y = 355
      elsif @command_window.index == 3
        @selecteur.x = 112
        @selecteur.y = 271
      elsif @command_window.index == 4
        @selecteur.x = 112
        @selecteur.y = 313
      elsif @command_window.index == 5
        @selecteur.x = 112
        @selecteur.y = 355
      end
           
      if $pokemon_party.size == 0
        # Enlève accès Equipe
        @command_window.disable_item(2)
      end
      if not($data_pokedex[0])
        # Enlève accès Pokédex si non possédé
        @command_window.disable_item(0)
      end
      if $game_system.save_disabled
        @command_window.disable_item(5)
      end         
     
      @command_window.disable_item(5)     
         
      Graphics.transition
      loop do             
        Graphics.update
        Input.update
        update
        if $scene != self
          break
        end
      end   
      Graphics.freeze       
      @command_window.dispose
      @spriteset.dispose
      @selecteur.dispose       
      @interface.dispose             
      @pkmn_team.dispose if not @pkmn_team.nil?
      Graphics.freeze
    end   
    #--------------------------------------------------------------------------
    #
    #--------------------------------------------------------------------------
    def update
      if @command_window.index == 0
        @selecteur.x = 24
        @selecteur.y = 271   
      elsif @command_window.index == 1
        @selecteur.x = 24
        @selecteur.y = 313
      elsif @command_window.index == 2
        @selecteur.x = 24
        @selecteur.y = 355
      elsif @command_window.index == 3
        @selecteur.x = 112
        @selecteur.y = 271
      elsif @command_window.index == 4
        @selecteur.x = 112
        @selecteur.y = 313
      elsif @command_window.index == 5
        @selecteur.x = 112
        @selecteur.y = 355
      end           
     
      # ウィンドウを更新     
      @command_window.update
      @spriteset.update
      @selecteur.update
      @interface.update     
      # コマンドウィンドウがアクティブの場合: update_command を呼ぶ
      if @command_window.active
        update_command
        return
      end
    end
   
    def dispose
      super
    end
     
    #--------------------------------------------------------------------------
    # ● フレーム更新 (コマンドウィンドウがアクティブの場合)
    #--------------------------------------------------------------------------
    def update_command           
      # B ボタンが押された場合
      if Input.trigger?(Input::B)
        # キャンセル SE を演奏
        $game_system.se_play($data_system.cancel_se)
        # マップ画面に切り替え       
        $scene = Scene_Map.new
        self.contents.clear
        return       
      end
      # C ボタンが押された場合
      if Input.trigger?(Input::C)         
        # パーティ人数が 0 人で、セーブ、ゲーム終了以外のコマンドの場合
        if $game_party.actors.size == 0 and @command_window.index < 4
          # ブザー SE を演奏
          $game_system.se_play($data_system.buzzer_se)
          return         
        end
        # コマンドウィンドウのカーソル位置で分岐
        case @command_window.index         
        when 0 # Pokédex         
          if not($data_pokedex[0])
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          $game_system.se_play($data_system.decision_se)
          $scene = Pokemon_Pokedex.new
          self.contents.clear
        when 1 # Menu
          if $pokemon_party.size == 0
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          $game_system.se_play($data_system.decision_se)
          $scene = Pokemon_Party_Menu.new
        when 2 # Sac
          $game_system.se_play($data_system.decision_se)
          $scene = Pokemon_Item_Bag.new     
        when 3 # Carte dresseur
          $game_system.se_play($data_system.decision_se)
          $game_temp.common_event_id = 19
          $scene = Scene_Map.new           
        when 4 # Sauvegarde
          if $game_system.save_disabled
            $game_system.se_play($data_system.buzzer_se)
            return           
          end
          $game_system.se_play($data_system.decision_se)
          $scene = Pokemon_Save.new
          self.contents.clear
        when 5 # Retour
          $game_system.se_play($data_system.decision_se)
          $scene = Scene_Map.new
        end
        return
      end
    end
  end
end



Explications :




Si ce n'est pas claire ou comporte un bug dites le moi Imbécile heureux
Et si vous voulez ajouter quelque chose n'ayant pas était mise dites le moi et je le rajouterai.Clin d'œil foireux
Prochain tuto : Comment changer son interface de combat
Tuto similaire pour PSP 0.7 et 4G+ : ./3868.htmll
Merci d'avoir lu. Imbécile heureux

Posté par Noty! le 19 Avr - 19:00 (2011)
Superbe Tuto, même si parfois on à un bon scripteur à disposition 42 ...
Non vraiment, c'est bien expliqué.

Posté par Kenny2503 le 19 Avr - 21:00 (2011)
Je trouve sa jolie grâce a toi sauf que
Citation:
Vous pouvez aligner plusieurs draw_text à la suite comme ceci :


Perso pour moi sa sert a rien sa sinon bravo!

Posté par Dadou974 le 12 Juil - 12:40 (2012)
En le lisant plusieurs fois, je commence à comprendre Imbécile heureux
Merci

Posté par Seusyn le 12 Juil - 12:44 (2012)
D'accord ce tuto est vieux mais faudrait peut être que quelqu'un se charge de la deuxième partie ^^"

Posté par Eternalis le 12 Juil - 17:37 (2012)
Ajouté a la liste des tutos.

Posté par pipo27210 le 15 Aoû - 20:21 (2012)
Merci pour ce tuto qui va beaucoup m'aider .
Mais un Screen pour montré a quoi sa ressemble ne serait pas de refus !
Pense-y .

Posté par erwin le 4 Sep - 10:55 (2012)
Il est super ce tuto, vivement la 2 eme partie car je doit scripter mon menu mais je suis nul en scripts !

Posté par Moy le 15 Mar - 10:22 (2013)
Je viens de retrouver cet ancien tuto ^^, si vous voulez que je continu la seconde partie dite le ici et je la ferais peut-être.

Posté par Redder le 17 Mar - 14:10 (2013)
Très bon tuto!C'est vrai qu'il est très bien expliqué, et pour les personnes pour qui le script et lui ça fait 2 c'est utile!Et oui fait la 2eme partie s'il te plaît!

Posté par Moy le 24 Nov - 16:22 (2013)
Je sais que j'ai déjà dit ça il y a quelque mois mais je pense faire la suite ...