Partagez
Aller en bas
Jodge65
Jodge65
Membre

Nombre de messages : 189
Age : 23
Localisation : Dans le SûD!
Distinction : aucune
Date d'inscription : 25/03/2011

2 petites modification sur le script de menu [résolue] Empty 2 petites modification sur le script de menu [résolue]

le Ven 5 Aoû 2011 - 11:18
Bonjours tout le monde!

Je fait appelle a vous (enfin, surtout les scripteur débutant ou pro Very Happy )Car j'ai 2 problème avec mon menu:

Problème 1:

J'ai un script de menu basique avec en plus le temps, la localisation et plusieurs boutons.
Le problème c'est que j'ai trop de bouton et que c'est dernier passe dessous les module de temps et de localisation--"
J'ai vue qu'il était possible de faire des ascenseurs pour éviter ce genre de problème, mais je n'est pas réussi a localiser la portion de code permettant cela, sur d'autre script... Je vous demande donc si vous ne pouvez pas me rajouter ce système d'ascenseur...

Screen:
Spoiler:
[img]2 petites modification sur le script de menu [résolue] Image_10 [/img]
Ex de "l'ascenseur"
Spoiler:
[img]2 petites modification sur le script de menu [résolue] Image_11 [/img]

Problème 2:

Le même script a quelque doublon voir triplons, je vous demande si vous pouviez l'optimiser un peu en ajoutant l'ascenseur (je peux me débrouiller en beaucoup de temps)

Le script:
Code:
#==============================================================================
# Création de Jodge65 a partir de plusieur script
#==============================================================================

class Raizen_Reput2_Command < Window_Selectable

  def initialize(width, commands, height, column_max = 1, row_max = 0, spacing = 32)
    if row_max == 0
      row_max = (commands.size + column_max - 1) / column_max
    end
    if (row_max*WLH + 32) >= height
      super(0, 0, width, height, spacing)
    else
      super(0, 0, width, row_max * WLH + 32, spacing)
    end
    @commands = commands
    @item_max = commands.size
    @column_max = column_max
    self.contents.dispose
    self.contents = Bitmap.new(width - 32, @item_max * WLH)
    refresh
    self.index = 0
  end

  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end

  def draw_item(index, color)
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    self.contents.clear_rect(rect)
    self.contents.font.color = color
    self.contents.draw_text(rect, @commands[index])
  end
 
end


#==============================================================================
# Modification de Scene_File
#==============================================================================
class Scene_File < Scene_Base
 
  def return_scene
    if @from_title
      $scene = Scene_Title.new
    elsif @from_event
      $scene = Scene_Map.new
    else
      $scene = Scene_Menu.new(5)
    end
  end
 
  def write_save_data(file)
    characters = []
    for actor in $game_party.members
      characters.push([actor.character_name, actor.character_index])
    end
    $game_system.save_count += 1
    $game_system.version_id = $data_system.version_id
    @last_bgm = RPG::BGM::last
    @last_bgs = RPG::BGS::last
    Marshal.dump(characters,          file)
    Marshal.dump(Graphics.frame_count, file)
    Marshal.dump(@last_bgm,            file)
    Marshal.dump(@last_bgs,            file)
    Marshal.dump($game_system,        file)
    Marshal.dump($game_message,        file)
    Marshal.dump($game_switches,      file)
    Marshal.dump($game_variables,      file)
    Marshal.dump($game_self_switches,  file)
    Marshal.dump($game_actors,        file)
    Marshal.dump($game_party,          file)
    Marshal.dump($game_troop,          file)
    Marshal.dump($game_map,            file)
    Marshal.dump($game_player,        file)
    Marshal.dump($reput_points, file)
  end
 
  def read_save_data(file)
    characters          = Marshal.load(file)
    Graphics.frame_count = Marshal.load(file)
    @last_bgm            = Marshal.load(file)
    @last_bgs            = Marshal.load(file)
    $game_system        = Marshal.load(file)
    $game_message        = Marshal.load(file)
    $game_switches      = Marshal.load(file)
    $game_variables      = Marshal.load(file)
    $game_self_switches  = Marshal.load(file)
    $game_actors        = Marshal.load(file)
    $game_party          = Marshal.load(file)
    $game_troop          = Marshal.load(file)
    $game_map            = Marshal.load(file)
    $game_player        = Marshal.load(file)
    $reput_points = Marshal.load(file)
    if $game_system.version_id != $data_system.version_id
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
  end
 
end


#==============================================================================
# Modification de Scene_End
#==============================================================================
class Scene_End < Scene_Base
 
  def return_scene
    $scene = Scene_Menu.new(6)
  end
 
end

##############################  Fin du script 1  #######################################
##################################################
# Mog Basic Menu Plus V 1.0 # (rajoute temps et position dans le menu)
##################################################
# Par Moghunter
# http://www.atelier-rgss.com
##################################################
# Game_Actor #
##############
class Game_Actor < Game_Battler
def now_exp
return @exp - @exp_list[@level]
end
def next_exp
return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
end
end
###############
# Window_Base #
###############
class Window_Base < Window
def draw_actor_level_menu(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, WLH, Vocab::level_a)
self.contents.font.color = normal_color
self.contents.draw_text(x + 16, y, 24, WLH, actor.level, 2)
end
def draw_actor_class_menu(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 85, WLH, actor.class.name)
end
def exp_gauge_color1
return text_color(30)
end
def exp_gauge_color2
return text_color(31)
end
def draw_actor_exp_meter(actor, x, y, width = 100)
if actor.next_exp != 0
exp = actor.now_exp
else
exp = 1
end
gw = width * exp / [actor.next_exp, 1].max
gc1 = exp_gauge_color1
gc2 = exp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, "Exp")
self.contents.font.color = normal_color
xr = x + width
self.contents.draw_text(xr - 60, y, 60, WLH, actor.next_rest_exp_s, 2)
end
end
#####################
# Window_MenuStatus #
#####################
class Window_MenuStatus < Window_Selectable
def initialize(x, y)
super(x, y, 384, 416)
refresh
self.active = false
self.index = -1
end
def refresh
self.contents.clear
@item_max = $game_party.members.size
for actor in $game_party.members
draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
x = 104
y = actor.index * 96 + WLH / 2
draw_actor_name(actor, x, y)
draw_actor_class_menu(actor, x + 120, y)
draw_actor_level_menu(actor, x + 200, y)
draw_actor_state(actor, x, y + WLH * 2)
draw_actor_hp(actor, x + 120, y + WLH * 1)
draw_actor_mp(actor, x + 120, y + WLH * 2)
draw_actor_exp_meter(actor, x , y + WLH * 1)
end
end
def update_cursor
if @index < 0
self.cursor_rect.empty
elsif @index < @item_max
self.cursor_rect.set(0, @index * 96, contents.width, 96)
elsif @index >= 100
self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
else
self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
end
end
end
############
# Game_Map #
############
class Game_Map
attr_reader :map_id
def mpname
$mpname = load_data("Data/MapInfos.rvdata")
$mpname[@map_id].name
end
end
###############
# Window_Time #
###############
class Window_Mapname < Window_Base
def initialize(x, y)
super(x, y+46, 160, WLH + 45)
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0-10, 120, 32, "Localisation")
self.contents.font.color = normal_color
self.contents.draw_text(4, 10, 120, 32, $game_map.mpname.to_s, 2)
end
end
###############
# Window_Time #
###############
class Window_Time < Window_Base
def initialize(x, y)
super(x, y+22, 160, WLH + 45)
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0-10, 120, 32, "Temps de Jeu")
@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 = normal_color
self.contents.draw_text(4, 10, 120, 32, text, 2)
end
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end
##############
# Scene_Menu #
##############
class Scene_Menu
def main
start
perform_transition
Input.update
loop do
Graphics.update
Input.update
update
break if $scene != self
end
Graphics.update
pre_terminate
Graphics.freeze
terminate
end
def initialize(menu_index = 0)
@menu_index = menu_index
end
def create_menu_background
@menuback_sprite = Sprite.new
@menuback_sprite.bitmap = $game_temp.background_bitmap
@menuback_sprite.color.set(16, 16, 16, 128)
update_menu_background
end
def create_menu_background
@menuback_sprite = Sprite.new
@menuback_sprite.bitmap = $game_temp.background_bitmap
@menuback_sprite.color.set(16, 16, 16, 128)
update_menu_background
end
def dispose_menu_background
@menuback_sprite.dispose
end
def update_menu_background
end
def perform_transition
Graphics.transition(10)
end
def start
create_menu_background
create_command_window
@gold_window = Window_Gold.new(0, 360)
@status_window = Window_MenuStatus.new(160, 0)
@playtime_window = Window_Time .new(0, 270)
@mapname_window = Window_Mapname.new(0, 178)
@status_window.openness = 0
@playtime_window.openness = 0
@mapname_window.openness = 0
@gold_window.openness = 0
@status_window.open
@playtime_window.open
@mapname_window.open
@gold_window.open
end
def pre_terminate
@status_window.close
@playtime_window.close
@mapname_window.close
@gold_window.close
@command_window.close
begin
@status_window.update
@playtime_window.update
@mapname_window.update
@gold_window.update
@command_window.update
Graphics.update
end until @status_window.openness == 0
end
def terminate
dispose_menu_background
@command_window.dispose
@gold_window.dispose
@status_window.dispose
@playtime_window.dispose
@mapname_window.dispose
end
def update
update_menu_background
@command_window.update
@gold_window.update
@status_window.update
@mapname_window.update
@playtime_window.update
if @command_window.active
update_command_selection
elsif @status_window.active
update_actor_selection
end
end
def create_command_window
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::save
s6 = Vocab::game_end
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
@command_window.openness = 0
@command_window.open
if $game_party.members.size == 0
@command_window.draw_item(0, false)
@command_window.draw_item(1, false)
@command_window.draw_item(2, false)
@command_window.draw_item(3, false)
end
if $game_system.save_disabled
@command_window.draw_item(4, false)
end
end
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
if $game_party.members.size == 0 and @command_window.index < 4
Sound.play_buzzer
return
elsif $game_system.save_disabled and @command_window.index == 4
Sound.play_buzzer
return
end
Sound.play_decision
case @command_window.index
when 0
$scene = Scene_Item.new
when 1,2,3
start_actor_selection
when 4
$scene = Scene_File.new(true, false, false)
when 5
$scene = Scene_End.new
end
end
end
def start_actor_selection
@command_window.active = false
@status_window.active = true
if $game_party.last_actor_index < @status_window.item_max
@status_window.index = $game_party.last_actor_index
else
@status_window.index = 0
end
end
def end_actor_selection
@command_window.active = true
@status_window.active = false
@status_window.index = -1
end
def update_actor_selection
if Input.trigger?(Input::B)
Sound.play_cancel
end_actor_selection
elsif Input.trigger?(Input::C)
$game_party.last_actor_index = @status_window.index
Sound.play_decision
case @command_window.index
when 1
$scene = Scene_Skill.new(@status_window.index)
when 2
$scene = Scene_Equip.new(@status_window.index)
when 3
$scene = Scene_Status.new(@status_window.index)
end
end
end
end
$mogscript = {} if $mogscript == nil
$mogscript["basic_menu_plus"] = true


#==============================================================================
# Modification de Scene_Menu
#==============================================================================
class Scene_Menu < Scene_Base

    def create_command_window
    s1 = "Item"
    s2 = "Aptitude"
    s3 = "Equipement"
    s4 = "Caractéristique"
    s5 = Vocab::Config
    s6 = "Bestiaire"
    s7 = "Quête"
    s8 = Vocab::save
    s9 = Vocab::game_end
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7, s8, s9])

    @command_window.index = @menu_index
    if $game_party.members.size == 0     
      @command_window.draw_item(0, false)
      @command_window.draw_item(1, false) 
      @command_window.draw_item(2, false) 
      @command_window.draw_item(3, false)
    end
    if $game_system.save_disabled       
      @command_window.draw_item(4, false)
    end
  end

  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      if $game_party.members.size == 0 and @command_window.index < 4
        Sound.play_buzzer
        return
      elsif $game_system.save_disabled and @command_window.index == 4
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case @command_window.index
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2,3  # Skill, equipment, status
        start_actor_selection
      when 4      # Config
        $scene = Scene_Config.new
      when 5      # Bestiaire
        $scene = Scene_Liste_Monstres.new
      when 6  #quete
          $scene = Scene_Quest.new(0, true)
      when 7      # Save
        $scene = Scene_File.new(true, false, false)
      when 8      # End Game
        $scene = Scene_End.new
      end
    end
  end
end




Dernière édition par Jodge65 le Sam 6 Aoû 2011 - 14:08, édité 1 fois
dricc
dricc
Membre

Nombre de messages : 2757
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

2 petites modification sur le script de menu [résolue] Empty Re: 2 petites modification sur le script de menu [résolue]

le Ven 5 Aoû 2011 - 14:31
L'ascenseur , c'est une histoire de "viewport" . et là , y'en a pas .

A la fin , au moment du :
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7, s8, s9])

il faudrait un truc comme :
@viewport = Viewport.new(0, 0, 160, 8 * WLH)
@command_window.viewport = @viewport
@command_window.height = 8*WLH + 32

Enfin , je pense et j'ai la flemme de tester Smile

Sinon, t'as une solution qui à mon avis serait plus sure : faire le ménage dans ton menu !
Par exemple , tu peux virer "Quitter le jeu" (parce que le joueur ferme la fenetre à la place de toute façon)
Tu peux mettre ton bestiaire sous forme d'objet aussi . parfois , tu sais , plutot que de prendre le risque de modifier un truc qui marche bien , vaux mieux trouver une autre solution .
Jodge65
Jodge65
Membre

Nombre de messages : 189
Age : 23
Localisation : Dans le SûD!
Distinction : aucune
Date d'inscription : 25/03/2011

2 petites modification sur le script de menu [résolue] Empty Re: 2 petites modification sur le script de menu [résolue]

le Ven 5 Aoû 2011 - 15:30
Je tenterai quand je serai rentrer si ça marche je mettrai résolue mais je préférerais avec ce système car il manque certaine option (je change selon mes envie) et je pense pas que les joueur veulent ouvrir un livre pour quitter le jeu par exemple^^

EDIT: Marche pas il me met erreur a la ligne--" je les peut être mal placer....


Dernière édition par Jodge65 le Ven 5 Aoû 2011 - 20:31, édité 1 fois (Raison : parceque!)
ZangtherOld
ZangtherOld
Membre

Nombre de messages : 1711
Date d'inscription : 07/08/2009

2 petites modification sur le script de menu [résolue] Empty Re: 2 petites modification sur le script de menu [résolue]

le Sam 6 Aoû 2011 - 12:55
Suffit juste de réduire la taille de la window_command dans Scene_Menu et ensuite modifier la classe Window_Command comme ceci :

Code:
  def refresh
    self.contents.clear
    create_contents  ## A ajouter !!
    for i in 0...@item_max
      draw_item(i)
    end
  end

Merci à ASHKA pour l'avoir indiqué dans ses cours sur le RGSS2.
Jodge65
Jodge65
Membre

Nombre de messages : 189
Age : 23
Localisation : Dans le SûD!
Distinction : aucune
Date d'inscription : 25/03/2011

2 petites modification sur le script de menu [résolue] Empty Re: 2 petites modification sur le script de menu [résolue]

le Sam 6 Aoû 2011 - 14:06
Bon je c'est pas si ça marche mais jai trouver un script de menu un peu différent mais qui prend plus d'option... Sa ira sinon merci! Je passe en résolue!
avatar
TTT
Membre

Nombre de messages : 855
Distinction : Trou du cul d'la mère Camu!
Elle est morte! Elle est morte!
Trou du cul d'la mère Camu!
Elle est morte, elle pétera plus!
Date d'inscription : 23/06/2009

2 petites modification sur le script de menu [résolue] Empty Re: 2 petites modification sur le script de menu [résolue]

le Sam 6 Aoû 2011 - 17:21
Je déplace dans les demandes résolues Wink
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum