[VX Ace]Отладочный оверлей

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
9 года 3 мес. назад - 9 года 3 мес. назад #96571 от DeadElf79
Отладочный оверлей
Debug Overlay

Информация:
Автор: DeadElf79
Версия: 1.0

Описание:
Добавляет инструмент для визуальной отладки разрабатываемой игры. Для всех сцен, являющихся потомками Scene_Base (то есть для всех вообще) создает изображение, которое расположено поверх всего. На это изображение можно выводить различную информацию - тексты, значения переменных, обводить прямоугольниками какие-нибудь места на экране.

По умолчанию при включенных переключателях 161 и 162 на оверлей выводятся прямоугольники окон и квадратики с обозначением расположения событий на карте.

Примеры различных настроек (прошу не обращать внимания на недорисованный графоний):
Вывод на оверлей всех ивентов

Вывод на оверлей ивентов, которые имеют не пустую графику и не графику из тайлсета


Код:
Code:
# DeadElf79's Debug Overlay # version: 1.0 $imported = {} if $imported.nil? $imported["De79 Debug Overlay"] = true module De79DebugOverlay # overlay settings COLOR_DEFAULT = Color.new(255,128,0) FONT_DEFAULT_SIZE = 20 FONT_DEFAULT_NAME = ['Arial'] FONT_DEFAULT_OUTLINE = false FONT_DEFAULT_SHADOW = false FONT_DEFAULT_OUTLINE_COLOR = Color.new(0,0,0,128) # overlay settings HASH_SWITCHES = { 161 => [Scene_Base, :debug_window_rects], 162 => [Scene_Map, :debug_event_rects] } INT_LINE_HEIGHT = 26 # 'debug events' settings BOOL_SHOW_TILED_EVENTS = false BOOL_SHOW_NOGFX_EVENTS = false HASH_SHOW_EVENT_ID = { :for_tiled => false, :for_no_gfx => false, :for_all_other => true } # no settings anymore! end def debug_clear return if SceneManager.scene.nil? return if SceneManager.scene.overlay.nil? SceneManager.scene.overlay.bitmap.clear end def debug_text(x,y,text,flags=[],color=nil) return if SceneManager.scene.overlay.nil? ov = SceneManager.scene.overlay.bitmap px, py = x, y tw = ov.text_size(text.to_s).width th = ov.text_size(text.to_s).height unless flags.empty? px = x - tw/2 if flags.include?(:center_x) py = y - th/2 if flags.include?(:center_y) end ov.draw_text(px,py,tw,th,text) end def debug_text_array(x,y,text_aray,flags=[],color=nil) return if SceneManager.scene.overlay.nil? ov = SceneManager.scene.overlay.bitmap maxes = [] text_array.each{|t|maxes.push(t.size)} tw = ov.text_size(text_array[maxes.index(maxes.max)]).width th = De79DebugOverlay::INT_LINE_HEIGHT text_array.each{|text| debug_text(x,y,text,flags,color) } end def debug_rect(x,y,w,h,solid=true,border=1,color=nil) return if SceneManager.scene.overlay.nil? color ||= De79DebugOverlay::COLOR_DEFAULT ov = SceneManager.scene.overlay.bitmap if solid ov.fill_rect(x,y,w,h,color) else ov.fill_rect(x,y,w,border,color) ov.fill_rect(x,y,border,h,color) ov.fill_rect(x,y+h-border,w,border,color) ov.fill_rect(x+w-border,y,border,h,color) end end def debug_easy_rect(rect,solid=true,border=1,color=nil) return if SceneManager.scene.overlay.nil? debug_rect( rect.x, rect.y, rect.width, rect.height, solid, border, color ) end class Scene_Base attr_accessor :overlay alias de79_debug_overlay_initialize initialize def initialize de79_debug_overlay_initialize @overlay = $TEST ? Sprite.new : nil setup_overlay refresh_overlay end def setup_overlay return if @overlay.nil? @overlay.bitmap = Bitmap.new(Graphics.width,Graphics.height) @overlay.z = 12345 @overlay.bitmap.font.name = De79DebugOverlay::FONT_DEFAULT_NAME @overlay.bitmap.font.size = De79DebugOverlay::FONT_DEFAULT_SIZE end def refresh_overlay return if $game_switches.nil? return if @overlay.nil? debug_clear De79DebugOverlay::HASH_SWITCHES.each do |switch_id, calling| if $game_switches[switch_id] unless calling[0].nil? if self.is_a? calling[0] method(calling[1]).call end end end end end def debug_window_rects windows = instance_variables.select{|v|instance_variable_get(v).is_a? Window} return if windows.size < 1 windows.each do |win| rect = win.bitmap.rect rect.x, rect.y = win.x, win.y debug_easy_rect(rect,false) end end def debug_event_rects return unless self.is_a? Scene_Map puts "start debug events" $game_map.events.each_value do |event| rect = nil if (0..Graphics.width).include?(event.screen_x) if (0..Graphics.height).include?(event.screen_y) if event.character_name == "" if event.tile_id > 0 && De79DebugOverlay::BOOL_SHOW_TILED_EVENTS rect = Rect.new(event.screen_x - 16,event.screen_y - 32, 32,32) if De79DebugOverlay::HASH_SHOW_EVENT_ID[:for_tiled] debug_text( event.screen_x, event.screen_y, event.id, [:center_x,:center_y] ) end else if De79DebugOverlay::BOOL_SHOW_NOGFX_EVENTS rect = Rect.new(event.screen_x - 16,event.screen_y - 32, 32,32) end end else rect = Rect.new(event.screen_x - 16,event.screen_y - 32, 32,32) end end end debug_easy_rect(rect,false,3) unless rect.nil? end end end
Последнее редактирование: 9 года 3 мес. назад пользователем DeadElf79.
Спасибо сказали: Демий, Paranoid

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.087 секунд
Работает на Kunena форум