Tasslehoff
Messages : 284
| Sujet: Sélection vérticale des personnages dans le menu. Mer 9 Fév - 19:45 | |
| Voilà un petit script qui permet d'avoir une sélection verticale des personnages dans le menu. La largeur de la sélection est automatique, mais vous pouvez désactiver ça pour spécifier une largeur. - Code:
-
#===================================================================== # ■ Window_MenuStatus redéfini # Permet d'avoir une séléction vérticale des personnages dans le menu. #===================================================================== # Auteur: Tasslehoff # Version: 2.0 # Date: 14/05/2011 #===================================================================== # # La taille de la séléction est réglée automatiquement selon le nombre de # personnages dans l'équipe. # Vous pouvez cependant désactiver cette option à la ligne 30 et choisir # une largeur à la ligne 33. # Vous pouvez également activer ou désactiver les barres de séparation entre # les personnages à la ligne 36. # #====================================================================== #Définit la classe (Window_MenuStatus) et la classe parente (Window_Selectable). #Window_MenuStatus hérite ainsi des variables de classe et des méthodes de Window_Selectable. class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # * Initialize (ce qui se passe au début) #-------------------------------------------------------------------------- def initialize ###################### # # largeur_auto = true # Taille automatique de la séléction. # # # true = activé et false = désactivé # # @largeur = 114 # Largeur de la séléction (conseillé : entre 76 et 448 # # # selon le nombre de personnages maximum dans l'équipe) # # @lignes = true # Barres de séparation entre les personnages # # # true = activé et false = désactivé ###################### #Crée la fenêtre. super(0, 0, 480, 480) self.contents = Bitmap.new(width - 32, height - 32) if largeur_auto largeur = (width - 32) / $game_party.actors.size @largeur = largeur.to_i end #Si @largeur est impair, ajoute 1. if @largeur%2 == 1 @largeur += 1 end #Spécifie le nombre maximum de colonnes (=le nombre de personnages dans l'équipe). @column_max = $game_party.actors.size #Appel la méthode refresh. refresh #Désactive le clignotement du curseur. self.active = false #Place le curseur sur -1. self.index = -1 end #-------------------------------------------------------------------------- # * Refresh (ce qui se passe à chaque frame, 1 seconde = 20 frames) #-------------------------------------------------------------------------- def refresh #Efface le contenu. self.contents.clear #Rends le nombre d'item (de séléctions) égal au nombre de personnages dans l'équipe. @item_max = $game_party.actors.size #Affiche les informations du personnage i en remplacant chaque fois i par un nombre #compris entre 0 et le nombre de personnages dans l'équipe. for i in 0...$game_party.actors.size x = i * @largeur actor = $game_party.actors[i] #Rend "actor" égal au personnage numéro i. draw_actor_graphic(actor, x + @largeur/2, 112) #Déssine le sprite de "actor". draw_actor_name(actor, x + @largeur/2-32, 0) #Ecrit le nom de "actor". draw_actor_class(actor, x + @largeur/2-32, 32) #Ecrit la classe de "actor". self.contents.draw_text(x+6+@largeur/2, 86, @largeur/2-32, 32, actor.level.to_s) #Ecrit le niveau de "actor". draw_actor_state(actor, x + @largeur/2-32, 112) #Ecrit l'état de "actor". draw_actor_exp_bis(actor, x, 244) #Ecrit l'expérience de "actor". draw_actor_hp_bis(actor, x, 156) #Ecrit les pv de "actor". draw_actor_sp_bis(actor, x, 200) #Ecrit les mp de "actor". draw_actor_equipement(actor, x, 300) if @lignes self.contents.fill_rect((i + 1) * @largeur, 0, 1, 480, Color.new(255, 255, 255)) end end end #-------------------------------------------------------------------------- # * Update Cursor Rect (met à jour le rectangle du curseur) #-------------------------------------------------------------------------- def update_cursor_rect #Si le curseur est en dessous de 0, l'éfface, sinon le met au bon endroit. if @index < 0 self.cursor_rect.empty else self.cursor_rect.set(@index * @largeur, 0, @largeur, self.height - 32) end end #-------------------------------------------------------------------------- # * Modifications de l'affichage des informations #-------------------------------------------------------------------------- ############################ #Affichage de l'expérience.# ############################ def draw_actor_exp_bis(actor, x, y) #Fixe la couleur à system_color. self.contents.font.color = system_color #Ecrit "Exp :". Entre parenthèses : (position x, position y, largeur, hauteur, texte). self.contents.draw_text(x+4, y, contents.text_size("Exp :").width, 32, "Exp :") #Fixe la couleur à normal_color. self.contents.font.color = normal_color #Ecrit l'expérience. Entre parenthèses : (position x, position y, largeur, hauteur, texte, alignement). self.contents.draw_text(x+contents.text_size("Exp :").width+6, y, @largeur-contents.text_size("Exp :").width - 14, 32, actor.exp_s, 2) #Dessine la barre d'expérience. self.contents.fill_rect(x+5, y+25, @largeur - 11, 6, Color.new(20, 20, 20, 150)) self.contents.fill_rect(x+4, y+24, @largeur - 12, 5, Color.new(0, 0, 0, 200)) self.contents.fill_rect(x+5, y+25, (@largeur-14)*actor.exp_s.to_i/actor.next_exp_s.to_i, 3, Color.new(100, 100, 220, 255)) end ################### #Affichage des PV.# ################### def draw_actor_hp_bis(actor, x, y) self.contents.font.color = system_color self.contents.draw_text(x+4, y, contents.text_size($data_system.words.hp+" :").width, 32, $data_system.words.hp+" :") self.contents.font.color = actor.hp == 0 ? knockout_color : actor.hp <= actor.maxhp / 3 ? crisis_color : normal_color self.contents.draw_text(x+contents.text_size($data_system.words.hp+" :").width+6, y, @largeur-contents.text_size($data_system.words.hp+" :").width - 14, 32, actor.hp.to_s, 2) if actor.hp <= actor.maxhp / 3 couleur_barre = Color.new(230, 230, 0, 255) else couleur_barre = Color.new(80, 230, 20, 255) end self.contents.fill_rect(x+5, y+25, @largeur - 11, 6, Color.new(20, 20, 20, 150)) self.contents.fill_rect(x+4, y+24, @largeur - 12, 5, Color.new(0, 0, 0, 200)) self.contents.fill_rect(x+5, y+25, (@largeur-14)*actor.hp/actor.maxhp, 3, couleur_barre) end ################### #Affichage des SP.# ################### def draw_actor_sp_bis(actor, x, y) self.contents.font.color = system_color self.contents.draw_text(x+4, y, contents.text_size($data_system.words.sp+" :").width, 32, $data_system.words.sp+" :") self.contents.font.color = actor.sp == 0 ? knockout_color : actor.sp <= actor.maxhp / 3 ? crisis_color : normal_color self.contents.draw_text(x+contents.text_size($data_system.words.sp+" :").width+6, y, @largeur-contents.text_size($data_system.words.sp+" :").width - 14, 32, actor.sp.to_s, 2) if actor.sp <= actor.maxsp / 3 couleur_barre = Color.new(165, 118, 100, 255) else couleur_barre = Color.new(100, 40, 160, 255) end self.contents.fill_rect(x+5, y+25, @largeur - 11, 6, Color.new(20, 20, 20, 150)) self.contents.fill_rect(x+4, y+24, @largeur - 12, 5, Color.new(0, 0, 0, 200)) self.contents.fill_rect(x+5, y+25, (@largeur-14)*actor.sp/actor.maxsp, 3, couleur_barre) end ############################ #Affichage de l'équipement.# ############################ def draw_actor_equipement(actor, x, y) draw_item($data_weapons[actor.weapon_id], x, y) draw_item($data_armors[actor.armor1_id], x+48, y) draw_item($data_armors[actor.armor2_id], x, y+48) draw_item($data_armors[actor.armor3_id], x+48, y+48) draw_item($data_armors[actor.armor4_id], x+24, y+96) end def draw_item(item, x, y) if item == nil return end bitmap = RPG::Cache.icon(item.icon_name) self.contents.blt(x+@largeur/2-36, y, bitmap, Rect.new(0, 0, 24, 24)) end end Screen : - Spoiler:
Enjoy ! (ou pas)
Dernière édition par Tasslehoff le Sam 14 Mai - 20:49, édité 11 fois | |
|