Andrew, спасибо.
Andrew, спасибо.
Ещё один баг в скрипте обнаружил. При выборе какой-либо опции вроде статуса или экипировки, и возвращении обратно в меню, появляется вот это:
http://www.imagepost.ru/images/839/GDBm6PHSra_3.png
Вот исправлений вариант
Протестируй на всякий случай, но у меня никаких багов больше нет.Код:#************************************************* #Final Fantasy 7 menu #************************************************* #Используеться для изменения понели управление меню. #Добавляет изображение чара, и строку уровня HP, SP, EXP. #Меняет положение меню, с левой стороны, на правую. #Добавляет анимацию при переходе, со строк меню. #Указывает локацию уровня. #Полностью обновляет строку "Статуса". # #Для создания изображения чара, потребуеться следующее: #Создайте изображение в формате .png #Назовите изображение именем чара, и вложите его в категорию #адреса: Characters/Faces/ #Изображение не должно привышать размера 80x80. #======================================== #■ Window_Base #-------------------------------------------------------------------------------- # Setting functions for the "Base" #======================================== class Scene_End #-------------------------------------------------------------------------- def main s1 = $str_totitle s2 = $str_shutdown s3 = $str_cancel @command_window = Window_Command.new(192, [s1, s2, s3]) @command_window.x = 320 - @command_window.width / 2 @command_window.y = 240 - @command_window.height / 2 Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @command_window.dispose if $scene.is_a?(Scene_Title) Graphics.transition Graphics.freeze end end #-------------------------------------------------------------------------- def update @command_window.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Menu.new(4) return end if Input.trigger?(Input::C) case @command_window.index when 0 command_to_title when 1 command_shutdown when 2 command_cancel end return end end #-------------------------------------------------------------------------- def command_to_title $game_system.se_play($data_system.decision_se) Audio.bgm_fade(800) Audio.bgs_fade(800) Audio.me_fade(800) $scene = Scene_Title.new end #-------------------------------------------------------------------------- def command_shutdown $game_system.se_play($data_system.decision_se) Audio.bgm_fade(800) Audio.bgs_fade(800) Audio.me_fade(800) $scene = nil end #-------------------------------------------------------------------------- def command_cancel $game_system.se_play($data_system.decision_se) $scene = Scene_Menu.new(4) end end class Window_Base < Window def draw_actor_face(actor, x, y) face = RPG::Cache.character("Faces/" + actor.character_name, actor.character_hue) fw = face.width fh = face.height src_rect = Rect.new(0, 0, fw, fh) self.contents.blt(x - fw / 23, y - fh, face, src_rect) end end def draw_actor_battler_graphic(actor, x, y) bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue) cw = bitmap.width ch = bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect) end #======================================== #■ Game_Map #-------------------------------------------------------------------------------- # Setting functions for the Map #======================================== class Game_Map def name $map_infos[@map_id] end end #======================================== #■ Window_Title #-------------------------------------------------------------------------------- # Setting functions for the Title #======================================== class Scene_Title $map_infos = load_data("Data/MapInfos.rxdata") for key in $map_infos.keys $map_infos[key] = $map_infos[key].name end end #================================================= ============================= # ■ Window_MenuStatus #------------------------------------------------------------------------------ # Sets up the Choosing. #================================================= ============================= class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # Set up #-------------------------------------------------------------------------- def initialize super(0, 0, 560, 454) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $defaultfonttype = "Palatino Linotype" self.contents.font.size = $defaultfontsize = 18 refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- # Drawing Info on Screen #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 94 y = i * 110 actor = $game_party.actors[i] draw_actor_face(actor, 6, y + 86) #To get rid of the Face, put a "#" before the draw_ of this line #draw_actor_graphic(actor, 48, y + 65) #and delete the "#" infront of draw of this line draw_actor_name(actor, x, y) draw_actor_class(actor, x + 144, y) draw_actor_level(actor, x, y + 18) draw_actor_state(actor, x + 144, y + 22) draw_actor_exp(actor, x+ 144, y + 44) draw_actor_hp(actor, x, y + 38) draw_actor_sp(actor, x, y + 58) end end #-------------------------------------------------------------------------- # Update of Cursor #-------------------------------------------------------------------------- def update_cursor_rect if @index < 0 self.cursor_rect.empty else self.cursor_rect.set(0, @index * 110, self.width - 32, 96) end end end #=======================================# # ■Window_GameStats # # written by AcedentProne # #------------------------------------------------------------------------------# class Window_GameStats < Window_Base def initialize super(0, 0, 160, 60) self.contents = Bitmap.new(width - 32, height - 32) self.contents.font.name = $defaultfonttype = "Palatino Linotype" self.contents.font.size = $defaultfontsize = 18 refresh end def refresh self.contents.clear #Drawing gold into separate commas by Dubealex case $game_party.gold when 0..9999 gold = $game_party.gold when 10000..99999 gold = $game_party.gold.to_s array = gold.split(//) gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s when 100000..999999 gold = $game_party.gold.to_s array = gold.split(//) gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s when 1000000..9999999 gold = $game_party.gold.to_s array = gold.split(//) gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s end #Draw Gold self.contents.font.color = system_color gold_word = $data_system.words.gold.to_s cx = contents.text_size(gold_word).width cx2=contents.text_size(gold.to_s).width self.contents.draw_text(4, 4, 120-cx-2, 32, gold_word) self.contents.font.color = normal_color self.contents.draw_text(124-cx2+1, 4, cx2, 32, gold.to_s, 2) self.contents.font.color = system_color # Draw "Time" @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) self.contents.font.color = system_color self.contents.draw_text(4, -10, 120, 32, "Время") end #-------------------------------------------------------------------------- # Update of The count #-------------------------------------------------------------------------- def update super if Graphics.frame_count / Graphics.frame_rate != @total_sec refresh end end end #================================================= ============================= # ■ Window_Mapname #------------------------------------------------------------------------------ # Draws the Map name #================================================= ============================= class Window_Mapname < Window_Base #-------------------------------------------------------------------------- # Set up #-------------------------------------------------------------------------- def initialize super(0, 0, 320, 44) self.contents = Bitmap.new(width - 52, height - 32) self.contents.font.name = $defaultfonttype = "Arial" self.contents.font.size = $defaultfontsize = 18 refresh end #-------------------------------------------------------------------------- # Draws info on screen #-------------------------------------------------------------------------- def refresh self.contents.clear # Map Name #map = $game_map.name self.contents.font.color = system_color self.contents.draw_text(4, -10, 220, 32, "Локация") self.contents.font.color = normal_color self.contents.draw_text(160, -10, 120, 32, $game_map.name) end end #================================================= ============================= # ■ Scene_Menu #------------------------------------------------------------------------------ # FF7 menu layout as requested by AcedentProne. #================================================= ============================= class Scene_Menu #--------------------------- edit------------------------------- attr_reader :status_window #/--------------------------- edit------------------------------- def initialize(menu_index = 0) @menu_index = menu_index end def main s1 = $data_system.words.item s2 = $data_system.words.skill s3 = $data_system.words.equip s4 = "Статус" s5 = "Сохранение" s6 = "Выход" #--------------------------- edit------------------------------- # Command menu @command_window = Window_Command.new(160, [s1, s2, s3, s4, s6]) @command_window.x = 640 - @command_window.width @command_window.y = 480 @command_window.z = 110 @command_window.index = @menu_index #If certain options are avaliable if $game_party.actors.size == 0 @command_window.disable_item(0) @command_window.disable_item(1) @command_window.disable_item(2) @command_window.disable_item(3) end #Showing location window @map = Window_Mapname.new @map.x = 640 - @map.width @map.y = 0 - @map.height - 1 @map.z = 110 #Showing the game stats @game_stats_window = Window_GameStats.new @game_stats_window.x = 0 - @game_stats_window.width @game_stats_window.y = 480 - @map.height - @game_stats_window.height @game_stats_window.z =110 #Showing the Menu Status window @status_window = Window_MenuStatus.new @status_window.x = 640 @status_window.y = 8 @status_window.z = 100 Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @command_window.dispose @game_stats_window.dispose @status_window.dispose @map.dispose end #-------------------------------------------------------------------------- #Defining the delay #-------------------------------------------------------------------------- def delay(seconds) for i in 0...(seconds * 1) sleep 0.01 Graphics.update end end #-------------------------------------------------------------------------- # Updating #-------------------------------------------------------------------------- def update @command_window.update @game_stats_window.update @status_window.update @map.update #Moving Windows inplace gamepos = 640 - @game_stats_window.width mappos = 480 - @map.height - 1 if @command_window.y > 0 @command_window.y -= 60 end if @game_stats_window.x < gamepos @game_stats_window.x += 80 end if @map.y < mappos @map.y += 80 end if @status_window.x > 0 @status_window.x -= 80 end #Saying if options are active if @command_window.active update_command return end if @status_window.active update_status return end end #-------------------------------------------------------------------------- # Updating the Command Selection #-------------------------------------------------------------------------- def update_command # If B button is pushed if Input.trigger?(Input::B) # Plays assigned SE $game_system.se_play($data_system.cancel_se) #Looping for moving windows out loop do if @command_window.y < 480 @command_window.y += 40 end if @game_stats_window.x > 0 - @game_stats_window.width @game_stats_window.x -= 40 end if @map.y > 0 - @map.height @map.y -= 40 end if @status_window.x < 640 @status_window.x += 40 end delay(0.5) if @status_window.x >= 640 break end end # Go to Map $scene = Scene_Map.new return end # If C button is pused if Input.trigger?(Input::C) # Checks actor size if $game_party.actors.size == 0 and @command_window.index < 4 # plays SE $game_system.se_play($data_system.buzzer_se) return end case @command_window.index when 0 $game_system.se_play($data_system.decision_se) loop do if @command_window.y < 480 @command_window.y += 40 end if @game_stats_window.x > 0 - @game_stats_window.width @game_stats_window.x -= 40 end if @map.y > 0 - @map.height @map.y -= 40 end if @status_window.x < 640 @status_window.x += 40 end delay(0.5) if @status_window.x >= 640 break end end $scene = Scene_Item.new when 1 $game_system.se_play($data_system.decision_se) @command_window.active = false @status_window.active = true @status_window.index = 0 when 2 $game_system.se_play($data_system.decision_se) @command_window.active = false @status_window.active = true @status_window.index = 0 when 3 $game_system.se_play($data_system.decision_se) @command_window.active = false @status_window.active = true @status_window.index = 0 when 4 $game_system.se_play($data_system.decision_se) loop do if @command_window.y < 480 @command_window.y += 40 end if @game_stats_window.x > 0 - @game_stats_window.width @game_stats_window.x -= 40 end if @map.y > 0 - @map.height @map.y -= 40 end if @status_window.x < 640 @status_window.x += 40 end delay(0.5) if @status_window.x >= 640 break end end $scene = Scene_End.new @status_window.active = false @status_window.index = 0 end return end end #-------------------------------------------------------------------------- # Updating Status Screen #-------------------------------------------------------------------------- def update_status if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) @command_window.active = true @status_window.active = false @status_window.index = -1 return end if Input.trigger?(Input::C) case @command_window.index when 1 if $game_party.actors[@status_window.index].restriction >= 2 $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.decision_se) loop do if @command_window.y < 480 @command_window.y += 40 end if @game_stats_window.x > 0 - @game_stats_window.width @game_stats_window.x -= 40 end if @map.y > 0 - @map.height @map.y -= 40 end if @status_window.x < 640 @status_window.x += 40 end delay(0.5) if @status_window.x >= 640 break end end $scene = Scene_Skill.new(@status_window.index) when 2 $game_system.se_play($data_system.decision_se) loop do if @command_window.y < 480 @command_window.y += 40 end if @game_stats_window.x > 0 - @game_stats_window.width @game_stats_window.x -= 40 end if @map.y > 0 - @map.height @map.y -= 40 end if @status_window.x < 640 @status_window.x += 40 end delay(0.5) if @status_window.x >= 640 break end end $scene = Scene_Equip.new(@status_window.index) when 3 $game_system.se_play($data_system.decision_se) loop do if @command_window.y < 480 @command_window.y += 40 end if @game_stats_window.x > 0 - @game_stats_window.width @game_stats_window.x -= 40 end if @map.y > 0 - @map.height @map.y -= 40 end if @status_window.x < 640 @status_window.x += 40 end delay(0.5) if @status_window.x >= 640 break end end $scene = Scene_Status.new(@status_window.index) end return end end end
Да, багов больше нет. Спасибо.Протестируй на всякий случай, но у меня никаких багов больше нет.
не не не, ты не понял. текст имеет 4 переменные - координаты х,у, и высота, ширина сектора в котором выводится текст. И от размера ширины зависит на сколько текст будет сплюснуть. Тебе надо увеличить ширину и изменить коодинату по х(уменьшить), тогда у тебя название будет ближе к слову Локация и не будет выходить за пределы окна.
--- Yellow House Studio ---
Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)
Социальные закладки