|
| Créer son menu custom partie 2/3. | |
| Auteur | Message |
---|
Kasbak Membre V.I.P.
Messages postés : 1356 Date d'inscription : 05/01/2013 Jauge LPC :
| Sujet: Créer son menu custom partie 2/3. Mar 21 Avr 2015 - 22:43 | |
| Bonsoir tout le monde, La suite du tuto pour faire son menu,on reprends là où on en été. - menu avec image de fond:
On va voir plusieurs choses. 1-Modifier le windowstatut 2-Ajouter des choix dans le menu 3-Modifier le selectable -Partie 2,ajout d'options :Avant de commencer on va copier un nouveau script au dessus de 'Main' qui va nous permettre d'ajouter des barres dans le menu.Appeler ce script 'Bars HP/SP'. - Script by Héretic's:
- Code:
-
#============================================================================== # ligne 175*
# # Heretic's Overhaul of the XRXS ATB Battle System # # Version: 1.031 # # Updated: Friday, May 23rd, 2014 # # # #============================================================================== # # # ** Window_Base - Gradient HP / SP Bars, Shadow Text, and more # # # #============================================================================== # # This class is for all in-game windows. # # This will create new definitions used in many Windows classes. Most notably # it is used by Window_BattleBars. It is also makes new methods available to # all windows that inherit from this class. # # No modifications of Scenes or menus take place in this page. # # --- Version History --- # # Version 1.031 - Bugfix for Division by Zero error with Enemies with 0 Max SP # # Version 1.03 - Lots of new Addons for ATB in general, no changes to this # script # #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # * Draw Line - Gradient Color Line # - start_x # - start_y # - end_x # - end_y # - start_color (Color.new(R,G,B, Opacity)) # - width [optional - default to 1 pixel] # - end_color [optional - default to start_color] #-------------------------------------------------------------------------- def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color) # Define Line Length in Positive Values distance = (start_x - end_x).abs + (start_y - end_y).abs # If not a Gradient if end_color == start_color for i in 1..distance x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i self.contents.fill_rect(x, y, width, width, start_color) end else for i in 1..distance x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i r = start_color.red * (distance-i)/distance + end_color.red * i/distance g = start_color.green * (distance-i)/distance + end_color.green * i/distance b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance self.contents.fill_rect(x, y, width, width, Color.new(r, g, b, a)) end end end #-------------------------------------------------------------------------- # * Critical Color - Static Color # ** - This method will be overwritten in later redefinition #-------------------------------------------------------------------------- def critical_stat_color return Color.new(255, 64, 128) end #-------------------------------------------------------------------------- # * Define New Colors for Consistency across Windows #-------------------------------------------------------------------------- def hp_color_1 return Color.new(255, 0, 0, 192) # Red end def hp_color_2 return Color.new(255, 255, 0, 192) # Orange end def sp_color_1 return Color.new(0, 0, 255, 192) # Blue end def sp_color_2 return Color.new(0, 255, 255, 192) # Blue Green end def color_shadow return Color.new( 0, 0, 0, 128) # Shadow end #-------------------------------------------------------------------------- # * Draw Shadow Text #-------------------------------------------------------------------------- def draw_shadow_text(x, y, width, height, string, align = 0) # Duplicate the Font Color color = self.contents.font.color.dup # Set Current Font Color to Black self.contents.font.color = Color.new(0, 0, 0) self.contents.draw_text(x + 2, y + 2, width, height, string, align) # Draw Text using Stored Color self.contents.font.color = color self.contents.draw_text(x, y, width, height, string, align) end #-------------------------------------------------------------------------- # * Draw HP # actor : actor # x : draw spot x-coordinate # y : draw spot y-coordinate # width : draw spot width #-------------------------------------------------------------------------- def draw_actor_hp_shadow(actor, x, y, width = 144) # Store current Font Color self.contents.font.color = system_color # Calculate if there is draw space for MaxHP if width - 32 >= 108 hp_x = x + width - 108 flag = true elsif width - 32 >= 48 hp_x = x + width - 48 flag = false end # Determine HP Font Color self.contents.font.color = actor.hp == 0 ? knockout_color : actor.hp <= actor.maxhp / 4 ? critical_stat_color : actor.hp <= actor.maxhp / 2 ? crisis_color : normal_color # Draws HP Text with Shadow in Dark Color draw_shadow_text(hp_x, y, 48, 32, actor.hp.to_s, 2) # Set Font Color back to Original Color self.contents.font.color = normal_color # Draw MaxHP if there is Space available if flag # Draw Original Color Text draw_shadow_text(hp_x + 48, y, 12, 32, "/", 1) draw_shadow_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s) end end #-------------------------------------------------------------------------- # * Draw SP # actor : actor # x : draw spot x-coordinate # y : draw spot y-coordinate # width : draw spot width #-------------------------------------------------------------------------- def draw_actor_sp_shadow(actor, x, y, width = 144) # Store current Font Color self.contents.font.color = system_color # Calculate if there is draw space for MaxSP if width - 32 >= 108 sp_x = x + width - 108 flag = true elsif width - 32 >= 48 sp_x = x + width - 48 flag = false end # Determine SP Font Color self.contents.font.color = actor.hp == 0 ? knockout_color : (actor.maxsp > 0 and actor.sp <= actor.maxsp / 4) ? critical_stat_color : (actor.maxsp > 0 and actor.sp <= actor.maxsp / 2) ? crisis_color : normal_color # Draws SP Text with Shadow in Dark Color draw_shadow_text(sp_x, y, 48, 32, actor.sp.to_s, 2) # Set Font Color back to Original Color self.contents.font.color = normal_color # Draw MaxSP if there is Space available if flag # Draw Original Color Text draw_shadow_text(sp_x + 48, y, 12, 32, "/", 1) draw_shadow_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s) end end #-------------------------------------------------------------------------- # * Draw Slanted Gradient HP Meter Bars # # hp is used in the BattleBars class to allow it to show Stored Values. # Non Battle Windows wont use it, but it is needed. #-------------------------------------------------------------------------- def draw_actor_hp_meter_line(actor, x, y, width = 64, height = 4, hp = nil)#156 #4 hp = hp ? hp : actor.hp w = width * hp / actor.maxhp self.contents.fill_rect(x+8, y+4, width, (height/4).floor, color_shadow) draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) x -= 1 y += (height/4).floor self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , color_shadow) draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) x -= 1 y += (height/4).ceil self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , color_shadow) draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) x -= 1 y += (height/4).ceil self.contents.fill_rect(x+8, y+4, width, (height/4).floor, color_shadow) draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) end #-------------------------------------------------------------------------- # * Draw Slanted Gradient SP Meter Bars # # sp is used in the BattleBars class to allow it to show Stored Values. # Non Battle Windows wont use it, but it is needed. #-------------------------------------------------------------------------- def draw_actor_sp_meter_line(actor, x, y, width = 64, height = 4, sp = nil) sp = sp ? sp : actor.sp w = (actor.maxsp > 0) ? width * sp / actor.maxsp : 0 self.contents.fill_rect(x+8, y+4, width, (height/4).floor, color_shadow) draw_line(x, y, x + w, y, sp_color_1, (height/4).floor, sp_color_2) x -= 1 y += (height/4).floor self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , color_shadow) draw_line(x, y, x + w, y, sp_color_1, (height/4).ceil , sp_color_2) x -= 1 y += (height/4).ceil self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , color_shadow) draw_line(x, y, x + w, y, sp_color_1, (height/4).ceil , sp_color_2) x -= 1 y += (height/4).ceil self.contents.fill_rect(x+8, y+4, width, (height/4).floor, color_shadow) draw_line(x, y, x + w, y, sp_color_1, (height/4).floor, sp_color_2) end #-------------------------------------------------------------------------- # * Draw Actor Exp Meter #-------------------------------------------------------------------------- def draw_actor_exp_meter(actor, x, y, width = 156, type = 0) self.contents.font.color = system_color # CP Black Background self.contents.fill_rect(x-1, y+27, width+2, 6, Color.new(0, 0, 0, 255)) # Convert Non Numbers to Numbers for Math if actor.exp == nil actor.exp = 0 actor.exp_s = "0" end # If Level is Maxed out if actor.next_exp_s == "-------" # Next Level is just 100% / 100 or just 1 percent_to_next_level = 1.0 # Calculate Percent to Next Level else # Math for Current c_exp and Next n_exp Exp Values c_exp = actor.exp - actor.exp_list[actor.level] n_exp = Float(actor.next_exp_s) - actor.exp_list[actor.level] # Math to calculate Percent to Next Level percent_to_next_level = c_exp / n_exp end w = [width * percent_to_next_level].min # Draw Vertical Gradient self.contents.fill_rect(x, y+28, w,1, Color.new(128, 128, 220, 255)) self.contents.fill_rect(x, y+29, w,1, Color.new(112, 112, 220, 255)) self.contents.fill_rect(x, y+30, w,1, Color.new(80, 80, 220, 255)) self.contents.fill_rect(x, y+31, w,1, Color.new(48, 48, 220, 255)) end #-------------------------------------------------------------------------- # * Draw Name # actor : actor # x : draw spot x-coordinate # y : draw spot y-coordinate #-------------------------------------------------------------------------- alias xrxs_bp7_draw_actor_name draw_actor_name def draw_actor_name(actor, x, y) # If Actor Name changed or Not Defined if (not defined? name or actor.name != name) # New Argument name = actor.name # Call Original xrxs_bp7_draw_actor_name(actor, x, y) end end #-------------------------------------------------------------------------- # * Draw State # actor : actor # x : draw spot x-coordinate # y : draw spot y-coordinate # width : draw spot width # align : alignment (0..flush left, 1..center, 2..flush right) # Align is New #-------------------------------------------------------------------------- def draw_actor_state(actor, x, y, width = 120, align = 0) text = make_battler_state_text(actor, width, true) self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color self.contents.draw_text(x, y, width, 32, text, align) end #-------------------------------------------------------------------------- # * Make State Text String for Drawing # actor : actor #-------------------------------------------------------------------------- def actor_state_text(battler) # Make text string for state names text = "" for i in battler.states if $data_states[i].rating >= 1 if text == "" text = $data_states[i].name else new_text = text + "/" + $data_states[i].name text_width = self.contents.text_size(new_text).width if text_width > width - brackets_width break end text = new_text end end end # If text string for state names is empty, make it [normal] if text == "" text = "[Normal]" else # Attach brackets text = "[" + text + "]" end # Return completed text string return text end end
Maintenant dans le script du scène_menu que vous aviez copier au dessus de main dans le précédent tuto vous aller vous rendre à la ligne 70 environ et trouver cette partie. - Code:
-
def refresh self.contents.clear @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 64 y = i * 116 actor = $game_party.actors[i] draw_actor_graphic(actor, x - 40, y + 80) draw_actor_name(actor, x, y) draw_actor_class(actor, x + 144, y) draw_actor_level(actor, x, y + 32) draw_actor_state(actor, x + 90, y + 32) draw_actor_exp(actor, x, y + 64)
draw_actor_hp(actor, x + 236, y + 32) draw_actor_sp(actor, x + 236, y + 64) end end On va ajouter entre la ligne draw_actor_exp et draw_actor_hp ces 2 lignes : - Code:
-
draw_actor_hp_meter_line(actor, x + 236, y + 32) draw_actor_sp_meter_line(actor, x + 236, y + 64) - Menu avec barres:
Bon après si vous préférez sans barres vous le faite pas. Pour modifier ces barres aller dans le script 'Bars HP/SP' et rdv à la ligne 171 et 201. - Code:
-
(actor, x, y, width = 64, height = 4, hp = nil) Le 64 correspond à la largeur et le 4 correspond à la hauteur,vous pouvez donc paramètrer ça à votre guise,vous pouvez aussi modifer les couleurs si ça vosu tente.La liste des couleurs sont plus haut vers ligne 80,et là 88 si vous remplacer 128 par 0 vous retirez l'ombre sous la barre.Vous pouvez même créer de nouvelles couleurs en vous basant sur le précédent tuto. Exemple: - Code:
-
def sp_color_3 return Color.new(255, 0, 0, 192) # Red end Puis ensuite vous modifier plus bas en dessous de la ligne 171 et 201 en remplaçant color sp 1 par 3 ect... On va également ajouter l'image des battlers On va aller dans le script window_base et ligne 100 environ et au dessus de : - Code:
-
#-------------------------------------------------------------------------- # * Draw Graphic # actor : actor # x : draw spot x-coordinate # y : draw spot y-coordinate #-------------------------------------------------------------------------- Vous coller ceci : - Code:
-
def draw_actor_battlegraphic(actor, x, y, opacity = 255) bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue) src_rect = Rect.new(0, 0, 111, 95) self.contents.blt(x, y, bitmap, src_rect, opacity) end On pourrais en suivant ce même principe ajouter des faces ou autres informations relatives au héros.Vous pouvez augmenter la taille des battlers en changer les 111,111 qui correspondent aux limites de l'image du battler. 1-Modifier le windowstatut :ensuite on retourne dans notre scène_menu custom et on ajoute dans la partie du windowstatut au dessus de draw_actor_graphic : - Code:
-
draw_actor_battlegraphic(actor, x, y, 155) Voila maintenant vous avez vos barres et votre battler pour chaque héros. vous pouvez aussi modifier les couleurs par exemple que le nom du héros soit en jaune,le status en bleu,ect...pour ça vous aller dans le windows_base vers les lignes 120 environ puis si vous avez compris le tuto d'avant vous devriez y arriver facilement,si vous êtes pas sur vous copier le script window_base au dessus de main et vous tester. Ensuite on va modifier cette fameuse fenêtre appeler windowstatut qui nous prends 3 quart de l'écran. On peut la modifer de plusieurs façons.Soit on la déplace,soit on la ratrécie soit on la retire complétement. Pour la déplacer : Vers la ligne 288 de scène_menu - Code:
-
@status_window = Window_MenuStatus.new @status_window.x = 160 @status_window.y = 0 Là le X,Y. Pour la retiré vous mettez un # devant c'est 3 ligne - Code:
-
# @status_window = Window_MenuStatus.new # @status_window.x = 160 # @status_window.y = 0 puis plus bas pareil vous mettez un # devant (comme ça si vous hanger d'avis pour la remettre vous retirez juste le #): - Code:
-
#@status_window.dispose et - Code:
-
#@status_window.update Nous on vas juste la modifier pour la garder mais en la ratrécissant. Pour cela on va plus haut dans le script 'scène_menu' dans la partie 'class Window_MenuStatus'. La vous voyez - Code:
-
def initialize super(0, 0, 480, 480) 480 c'est la taille et la largeur,donc pour ratrécir la fenêtre c'est là,mais avant on va resserrer les éléments.Pour ça vous aller quelques lignes plus bas et vous devriez avoir quelque chose qui ressemble à ça : - Code:
-
self.contents.font.size = 14 draw_actor_battlegraphic(actor, x, y, 155) draw_actor_graphic(actor, x - 40, y + 80) draw_actor_name(actor, x, y) draw_actor_class(actor, x + 144, y) draw_actor_level(actor, x, y + 32) draw_actor_state(actor, x + 90, y + 32) draw_actor_exp(actor, x, y + 64) draw_actor_hp(actor, x + 236, y + 32) draw_actor_sp(actor, x + 236, y + 64) draw_actor_hp_meter_line(actor, x + 236, y + 32) draw_actor_sp_meter_line(actor, x + 236, y + 64) On n'a donc partout des données X,Y auquel on peut apporter des modifications et ainsi déplacer le level,la class,ect...selon vos envies. Petit rappel vous pouvez aussi changer la taille en ajoutant (pour la placez mettez la comme dans l'exemple au dessus) : - Code:
-
self.contents.font.size = 14 C'est taille 24 par defaut. Si vous voulez mettre les personnages à la vertical ajouter ce script en dessous de la partie du script windowstatut (ensuite avec le X,Y vous pouvez mettre ça en haut ou en bas de votre menu): - Exemple vertical:
- Code:
-
#============================================================================== # ¦ Window_MenuStatus #==============================================================================
class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # ? initialize #-------------------------------------------------------------------------- def initialize super(0, 0, 480, 480)#(0, 0, 480, 480)900 1440 #360 @column_max = 4 #1#4 @item_max = $game_party.actors.size self.contents = Bitmap.new(width - 32, row_max * 112)#225 self.contents.font.name = $fontface
$fontsize = self.contents.font.size = 18 self.contents.font.size = $fontsize #Font.default_size = 12
#fenetre menu trans self.opacity = 0 #@img_fond = Sprite.new #@img_fond.bitmap = RPG::Cache.picture("Background")
refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- # ? refresh #-------------------------------------------------------------------------- def refresh self.contents.clear
for i in 0...$game_party.actors.size x = i % 4 * 112 #2 112 y = i / 4 * 112 actor = $game_party.actors[i] #dessine un carré pour séparer les characters, changer couleur transparente par ce que vous voulez #couleur désirée... (methode pour faire un carré ci-dessous)
#draw_square(x, y, 110, black_color) #draw_actor_battlegraphic(actor, x, y, 255)#Rep #draw_actor_graphic(actor, x + 90, y + 50) #draw_actor_name(actor, x + 5, y) #self.contents.draw_text(x + 5, y + 20, 225, 32, "HP : #{actor.hp}") #self.contents.draw_text(x + 5, y + 40, 225, 32, "MP : #{actor.sp}") #draw_actor_level(actor, x + 5, y + 60) #draw_actor_state(actor, x + 5, y + 80) #draw_actor_hp_meter(actor, x + 5, y + 17) #draw_actor_sp_meter(actor, x + 5, y + 37)
#draw_square(x, y, 110, black_color)#(x, y, 110, black_color) draw_actor_battlegraphic(actor, x, y, 155)#Rep trans du faceset 100 115 155 draw_actor_graphic(actor, x + 88, y + 105)#(actor, x + 88, y + 95)
draw_actor_hp_meter_line(actor, x + 5, y + 66)#(actor, x + 5, y + 175) draw_actor_sp_meter_line(actor, x + 5, y + 86)#(actor, x + 150, y + 175)
#self.contents.font.color = yellow_color self.contents.draw_text(x + 7, y + 53, 225, 32, "HP : #{actor.hp}") #self.contents.font.color = green_color self.contents.draw_text(x + 5, y + 72, 225, 32, "MP : #{actor.sp}")
self.contents.font.color = purple3_color self.contents.font.color = yellow_color draw_actor_level(actor, x + 5, y + 85)
self.contents.font.color = normal_color draw_actor_name(actor, x + 5, y )
self.contents.font.color = purple3_color draw_actor_class(actor, x + 5, y + 14) draw_actor_state(actor, x + 5, y + 28)
end end #-------------------------------------------------------------------------- # ? define the page's top row #-------------------------------------------------------------------------- def top_row return self.oy / 112#225 end #-------------------------------------------------------------------------- # ? define the page maximum rows #-------------------------------------------------------------------------- def page_row_max return (self.height - 32) / 112#225 end #-------------------------------------------------------------------------- # ? defines a method to change the page's top row #-------------------------------------------------------------------------- def top_row=(row) if row < 0 row = 0 end if row > row_max - 1 row = row_max - 1 end self.oy = row * 112#225 end #-------------------------------------------------------------------------- # ? update the cursor movement #-------------------------------------------------------------------------- def update_cursor_rect if @index < 0 self.cursor_rect.empty return end row = @index / @column_max if row < self.top_row self.top_row = row end if row > self.top_row + (self.page_row_max - 1) self.top_row = row - (self.page_row_max - 1) end #self.cursor_rect.set(@index % 4 * 112, @index / 4 * 112 - self.oy, 112, 112) self.cursor_rect.set(@index % 4 * 112, @index / 4 * 112 - self.oy, 112, 112)
end end
C'est un code repris d'un autre script mais dedans si vous avez bien suivie vous devriez pouvoir tout régler facilement. Voilà je pense que pour cette partie vous avez assez d'infos pour bien modifier ça. 2-Ajouter des choix dans le menu :On va donc passer à la suite,ajouter une option dans le menu,voila une liste des choses qui peuvent etre généralement ajouter dans un jeu si vous manquez d'idées mais que vous trouver votre menu incomplet(j'ai les scripts pour la plus part des options si vous avez besoin envoyer moi un MP si vous ne le trouvez pas). Biographie Téléportation Statistiques Réputation Gestion equipe Options Crédits Aide Artworks Notebook Quêtes Bestiaire Craft system Aptitudes Donc pour rajouter une option il vous faut déjà la ligne d'appel au script,par exemple imaginons 'quêtes' ça donnerai : - Code:
-
$scene = Scene_Quete.new Ensuite vous aller dans votre scène_menu et vous chercher vers ligne 350 : - Code:
-
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 Souvenez vous on été déjà venu ici modifier des trucs dans le premier tuto. Là on va ajouter l'option de manière très simple. Ajouter en dessous de s4 - Code:
-
s5 = "Quêtes" puis renommer dans l'ordre s1,s2,s3,s4,s5,s6,s7.Vous obtenez : - Code:
-
s2 = $data_system.words.skill s3 = $data_system.words.equip s4 = "Statut" s5 = "Quêtes" s6 = "Sauvegarder" s7 = "Quitter le jeu" Pour les premières ligne c'est liès au nom données dans votre base de données,mais vous pouvez mettre s1 = "Objets" ou remplacer par un autre mot c'est pas gênant. Ensuite vous allez ajouter votre s7 dans cette lignes juste en dessous. - Code:
-
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,s7]) Puis plus bas environ une centaine de ligne vous aller trouver - Code:
-
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 Vous allez donc rajouter : When 4 - Code:
-
$game_system.se_play($data_system.decision_se) $scene = Scene_Quetes.new Puis ensuite vous remettez ensuite les bon chiffre dans l'odre when 5 when 6 ect..il va manquer le 7 mais c'est normal c'est parce que dans cette partie le prmier est pas le 1 mais le 0.Par contre si vous faite cette exemple sans avoir le script des quêtes il est évident que le jeu va planter lorsque vous aller cliquer sur 'Quetes' dans le menu. Exemple (j'ai mis quetes en bas pour aller plus vite) : - Menu quetes ajout:
Ensuite il vous faudra aller dans vos script ajouter et trouver la ligne qui ressemble à ça : - Code:
-
$scene = Scene_Menu.new(4) Et vous remplacez le 4 selon l'endroit ou vous voulez revenir dans le menu,par exemple si la en me basant sur l'image au dessus j'ai 4 je vais revenir au menu statut au lieu de quetes.il faudrais donc que je cherche la ligne dans le script quête et que je remplace par : - Code:
-
$scene = Scene_Menu.new(6) Voila vous savez ajouter des options à votre menu facilement. 3-Modifier le selectable :Maintenant passons à la dernière étape de ce tuto,modifier le selectable du menu. A quoi ça sert ? Tout simplement à modifier la structure de votre menu,par exemple vous aller pouvoir mettre vos choix comme dans les schéma ci-dessous : - schéma 1:
- schéma 2:
- schéma 3:
Pour faire ça vous aller coller ce script au dessus de votre scène_menu modifié : - Code:
-
#============================================================================== # ** Window_ShopCommand #------------------------------------------------------------------------------ # This window is used to choose your business on the shop screen. #==============================================================================
class Window_Menu < Window_Selectable #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(width, commands) super(0, 0, width, commands.size * 32 + 32) @item_max = commands.size @column_max = 4 @commands = commands refresh self.index = 0 end #-------------------------------------------------------------------------- # * Create Contents #-------------------------------------------------------------------------- def create_contents self.contents.clear if self.contents self.contents = Bitmap.new(width - 32, height - 32)
end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # * Draw Item # index : item number #-------------------------------------------------------------------------- def draw_item(index) x = 4 + index * 160 y = index / 2 * 32 self.contents.draw_text(x, y, 128, 32, @commands[index]) end #-------------------------------------------------------------------------- # * Update Cursor Rect #-------------------------------------------------------------------------- def update_cursor_rect # ??????? 0 ????? if @index < 0 self.cursor_rect.empty return end # ??????? row = @index / @column_max # ??????????????????????? if row < self.top_row # ?????????????????? self.top_row = row end # ????????????????????????? if row > self.top_row + (self.page_row_max - 1) # ??????????????????? self.top_row = row - (self.page_row_max - 1) end # ?????????Calculer la largeur du point d'insertion #largeur de la colonne* cursor_width = self.width / @column_max - 85#262 20 38 # ??????????Calculer les coordonnées du curseur x = @index % @column_max * (cursor_width + 30)#ecart gauche a droite y = @index / @column_max * 105 - self.oy # ??????????Mise à jour le rectangle de curseur self.cursor_rect.set(x, y, cursor_width, 75)#75 end end
En le regardant de plus prêt sur rmxp vous verrez des phrases en vert,elle vous aiderons à vous repérer pour gérer les mesures,vous devrez faire plusieurs tests afin de bien régler ça. Ensuite vous allez retourner dans votre scène_menu vers les lignes 400 et remplacer : - Code:
-
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,s7]) @command_window.index = @menu_index @command_window.x = 0 @command_window.y = 0 par : - Code:
-
@command_window = Window_Menu.new(640, [s1, s2, s3, s4, s5, s6,s7]) @command_window.index = @menu_index @command_window.x = 0 @command_window.y = 0 - Exemple du menu en cour:
Voila maintenant votre curseur sera plus du tout pareil,vous n'avez plus qu'a le paramétrer,avec les écart,les colonnes,ect...Mais vous pouvez toujours laisser l'ancien. Comme vous le voyez le texte lié au menu c'est décaler donc aller plus haut et mettez entre "" du vide. Exemple : - Code:
-
s1 = ""#$data_system.words.item s2 = ""#$data_system.words.equip s3 = ""#$data_system.words.skill s4 = ""#"Status"
s5 = ""#"Clan" s6 = ""#"Biographie"
s7 = ""#"Objectifs" s8 = ""#"Ennemis" s9 = ""#"Statistiques"
s10 = ""#"Sauvegarder" s11 = ""#"Load" s12 = ""#"Quitter" Comme ça vous aurais en vert à quoi ça correspond. Bon là votre menu c'est un beau bazar,c'est pour ça que dans le tuto 3 on verra comment finaliser tous ça et remettre le texte sur les bouton,on verra également comment ajouter le lieu de la map,ajouter des petits scripts utiles avec des textes,des variables,avoir des menus alternatifs,des infos liés à la progression,créer un indicateur météo,et une petite partie graphique assez simple pour embelir votre menu,et après se sera fini. P.S: Désolé j'ai du faire pas mal de fautes d'orthographes dans ce tuto,j'espère ça vous à pas piquez les yeux |
| | | City Hunter Administrateur
Messages postés : 6524 Date d'inscription : 25/05/2011 Jauge LPC :
| Sujet: Re: Créer son menu custom partie 2/3. Dim 26 Avr 2015 - 20:52 | |
| Je suis actuellement de suivre ton tuto.. a la lettre et y a une erreur! J'ai pas trouvé la partie que tu nous demande de chercher au début dans scene-menu. Le def refresh etc...
Normal! Puisqu'il n'est pas dans scene menu xD Mais dans le menu de windows status oui. Si il est dans le scene_menu.. Alors il y a un problème car je l'ai pas o.o |
| | | Kasbak Membre V.I.P.
Messages postés : 1356 Date d'inscription : 05/01/2013 Jauge LPC :
| Sujet: Re: Créer son menu custom partie 2/3. Lun 27 Avr 2015 - 5:30 | |
| Regarde c'est dans la partie où tu as collé ça (vers ligne 70-100): - Code:
-
class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 0, 480, 480) self.contents = Bitmap.new(width - 32, height - 32) self.opacity = 0 refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 64 y = i * 116 actor = $game_party.actors[i] self.contents.font.size = 24 draw_actor_battlegraphic(actor, x, y, 155) draw_actor_graphic(actor, x - 40, y + 80) draw_actor_name(actor, x, y) draw_actor_class(actor, x + 144, y) draw_actor_level(actor, x, y + 32) draw_actor_state(actor, x + 90, y + 32) draw_actor_exp(actor, x, y + 64) draw_actor_hp(actor, x + 136, y + 32)#(actor, x + 236, y + 32) draw_actor_sp(actor, x + 136, y + 64)#(actor, x + 236, y + 64) draw_actor_hp_meter_line(actor, x + 136, y + 32) draw_actor_sp_meter_line(actor, x + 136, y + 64) self.contents.font.size = 16 end end Dans le tuto partie 1 c'est écrit : - Kasbak a écrit:
Donc on va copier au dessus du script au dessus de la ligne 1 ces petits bloc de textes.Chaque bloc est lié aux fenêtres,des lignes on été ajoutées pour simplifier les modifications.
- Gold:
- Code:
-
#============================================================================== # ¦ Window_Gold #------------------------------------------------------------------------------ # le texte a été remplacé par une icone #==============================================================================
class Window_Gold < Window_Base #-------------------------------------------------------------------------- # ? initialize #-------------------------------------------------------------------------- def initialize super(0, 0, 160, 64) self.contents = Bitmap.new(width - 32, height - 32) #self.contents.font.name = $fontface #self.contents.font.size = $fontsize self.opacity = 0
self.contents.font.size = 12 refresh end #-------------------------------------------------------------------------- # ? refresh #-------------------------------------------------------------------------- def refresh self.contents.clear #cx = 24 self.contents.font.size = 22 bitmap = RPG::Cache.icon("") rect = Rect.new(0, 2, 24, 24) #self.contents.blt(124-cx, 0, bitmap, rect)
cx = contents.text_size($data_system.words.gold).width self.contents.font.color = Color.new(130, 130, 85, 255) self.contents.draw_text(4, -8, 120-cx-2, 32, $game_party.gold.to_s, 2) self.contents.font.color = Color.new(130, 130, 85, 255) self.contents.draw_text(124-cx, -8, cx, 32, $data_system.words.gold, 2) ##fin add end end
- Playtime:
- Code:
-
#============================================================================== # ¦ Window_PlayTime #------------------------------------------------------------------------------ # cette fenêtre a été compacté pour montrer toutes les commandes dans le menu #==============================================================================
class Window_PlayTime < Window_Base #-------------------------------------------------------------------------- # ? initialize #-------------------------------------------------------------------------- def initialize super (0, 0, 353, 900) #(0, 0, 160, 64) self.contents = Bitmap.new(width - 32, height - 32) #self.contents.font.name = $fontface self.contents.font.size = 14 #fenetre argent trans ,pour mettre y0 et x0 voir plus bas vers ligne 450... self.opacity = 0 #self.contents.font.size = 12 #self.contents.font.size = 20 refresh end
#-------------------------------------------------------------------------- # ? refresh #-------------------------------------------------------------------------- def refresh self.contents.clear @total_sec = Graphics.frame_count / Graphics.frame_rate hour = @total_sec / 60 / 60 min = @total_sec / 60 % 60 sec = @total_sec % 60 text = sprintf("%02d:%02d:%02d", hour, min, sec) self.contents.font.color = Color.new(130, 130, 85, 255) self.contents.draw_text(4, 0, 120, 32, text, 2) end #-------------------------------------------------------------------------- # ? redefine update method #-------------------------------------------------------------------------- def update super if Graphics.frame_count / Graphics.frame_rate != @total_sec refresh end end end
- MenuStatus:
- Code:
-
#============================================================================== # ** Window_MenuStatus #------------------------------------------------------------------------------ # This window displays party member status on the menu screen. #==============================================================================
class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 0, 480, 480) self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0 refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 64 y = i * 116 actor = $game_party.actors[i] draw_actor_graphic(actor, x - 40, y + 80) draw_actor_name(actor, x, y) draw_actor_class(actor, x + 144, y) draw_actor_level(actor, x, y + 32) draw_actor_state(actor, x + 90, y + 32) draw_actor_exp(actor, x, y + 64) draw_actor_hp(actor, x + 236, y + 32) draw_actor_sp(actor, x + 236, y + 64) end end #-------------------------------------------------------------------------- # * Cursor Rectangle Update #-------------------------------------------------------------------------- def update_cursor_rect if @index < 0 self.cursor_rect.empty else self.cursor_rect.set(0, @index * 116, self.width - 32, 96) end end end
- Steps:
- Code:
-
#============================================================================== # ** Window_Steps #------------------------------------------------------------------------------ # This window displays step count on the menu screen. #==============================================================================
class Window_Steps < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 0, 160, 96) self.contents = Bitmap.new(width - 32, height - 32) self.opacity = 0 refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = system_color self.contents.font.color = Color.new(0, 60, 255, 255) self.contents.draw_text(4, 0, 120, 32, "Nb de pas") self.contents.font.color = normal_color self.contents.font.color = Color.new(190, 60, 55, 255) self.contents.draw_text(4, 32, 120, 32, $game_party.steps.to_s, 2) end end
Tu as du oublier de copier ça ou tu les as copier ailleurs peu-etre ? |
| | | City Hunter Administrateur
Messages postés : 6524 Date d'inscription : 25/05/2011 Jauge LPC :
| Sujet: Re: Créer son menu custom partie 2/3. Lun 27 Avr 2015 - 19:42 | |
| Ah non^^ Mais j'ai fini par le trouver. Le problème c'est que tu dis ceci : - Kasbak a écrit:
- Maintenant dans le script du scène_menu que vous aviez copier au dessus de main dans le précédent tuto vous aller vous rendre à la ligne 70 environ et trouver cette partie.
Du coup, suivant le tuto à la lettre.. J'ai chercher pendant plusieurs minutes dans scene_menu... Mais j'ai rien trouvé... Puisque c'est dans MenuStatus XD C'est juste une remarque pour te dire que pour moi tu t'es planté ici ^^" Mais que je suis pas sur... Et ta réponse me confirme bien =) |
| | | Kasbak Membre V.I.P.
Messages postés : 1356 Date d'inscription : 05/01/2013 Jauge LPC :
| Sujet: Re: Créer son menu custom partie 2/3. Mar 28 Avr 2015 - 1:13 | |
| Mais non y'a pas d'erreur lol,en fait tu es sensé avoir coller la partie MenuStatus,gold,playtime et steps,dans ton script Scene_menu,faut pas aller modifier le menustatus de base de rpg maker je pense c'est ce que tu as été faire.Et comme tu colle c'est 4 script au dessus de la ligne 1 de ton scene_menu custom (le scene_menu que tu a copier au dessus de 'main')tu te retrouve à peu pret vers la ligne 70 avec ton menustatus.
Je résume,la juste au dessus dans mon précédent post y'a 4 scripts,tu les copie 1 pars un et tu les colle dans ton scene_menu custom,celui que tu est en train de faire,tu les colle tout en haut du script ligne 1,et du coup tu va te retrouver avec vers la ligne 70 le menustatut.
Au pire si tu comprends pas ce que je veut expliquer,fait voir ton script actuel voir ou tu en ai,comme ça on voit ça ensemble. |
| | | Accroma Paysan (niveau 4)
Messages postés : 33 Date d'inscription : 19/04/2015 Jauge LPC :
| Sujet: Re: Créer son menu custom partie 2/3. Jeu 30 Avr 2015 - 14:06 | |
| C'est possible de faire le même tutoriel du même genre que sur la version VXAce ? |
| | | Kasbak Membre V.I.P.
Messages postés : 1356 Date d'inscription : 05/01/2013 Jauge LPC :
| Sujet: Re: Créer son menu custom partie 2/3. Jeu 30 Avr 2015 - 14:44 | |
| Oui c'est faisable mais pas par moi j'y connais rien à ace désolé. |
| | | City Hunter Administrateur
Messages postés : 6524 Date d'inscription : 25/05/2011 Jauge LPC :
| Sujet: Re: Créer son menu custom partie 2/3. Sam 2 Mai 2015 - 18:52 | |
| Non non ^^ J'ai très bien compris et j'ai bien copier coller^^ Mais je viens de comprendre l'erreur.. qui vient de moi (ou peut être toi je sais pas ^^" ) Car j'ai compris avec ta seconde explication pourquoi j'ai cette erreur.
Explication, j'ai bel et bien copier coller les 4 scripts. MAis j'ai fais une copie simple des programmes... mais je ne les ais pas intégrer dans le scene-menu. Je m'explique, je n'avais pas compris qu'il fallait les copier dans le scene menu... J'ai copier les scripts comme le scene menu et je les ai mis au dessus de ce dernier. ^^"
En gros quand tu look ma liste de script et 5 scripts en double ^^" D'où mon incompréhension... Car dans mon cas, la partie dont je te parle ne fait pas partie de scene menu.. Donc je sais plus tes explications dans la première partie.. Mais en tout cas pour moi, cela n'a pas été très claire ^^" |
| | | Kasbak Membre V.I.P.
Messages postés : 1356 Date d'inscription : 05/01/2013 Jauge LPC :
| Sujet: Re: Créer son menu custom partie 2/3. Sam 2 Mai 2015 - 19:00 | |
| - City Hunter a écrit:
- Pour commencer avant d'apporter de nouvelles modifications on va ajouter des infos dans notre script.
Des infos pour chaque fenêtre. Donc on va copier au dessus du script au dessus de la ligne 1 ces petits bloc de textes. Pourtant je l'avait bien écrit,mais bon après c'est sur tu peu facilement perdre le fil,j'essayerais de mettre un screenshot la prochaine fois pour bien voir la différence entre collé au dessus de main et collé dans le script. Puis au final c'est pas genant de toute façon tu peux les coller au dessus de ton script scene_menu ça changera rien,fait comme toi tu prefère,moi je prefère avoir ça dans le scene_menu comme ça quand je veux faire un test que je suis pas sur je copie colle le scene-menu en dessous et je modifie dedans et l'autre me sert de sauvegarde,que si tu copie colle tout les scripts tu va en avoir plein tu va te perdre,déja la t'en à 5. |
| | | Contenu sponsorisé
| Sujet: Re: Créer son menu custom partie 2/3. | |
| |
| | | |
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |