Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Отображение значения переменных в игре

Отображение значения переменных в игре 8 года 9 мес. назад #83789

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 1 место в ГотвВетеранОрганизатор конкурсовПроект месяца 2 местоУчитель3 местоПроект месяца 1 местоПисатель 3 местоПрограммист Ruby
Отображение значения переменных в игре

Информация:
Автор: DeadElf79
Версия: 1.0
Версия мейкера: VX Ace
Лицензия: свободно для использования где угодно

Описание:
Скрипт позволяет отображать значение переменных на экране.

Можно настроить:
  • шрифт,
  • цвет,
  • текст,
  • положение на экране

Внимание: в тексте обязательно должно быть сочетание символов %d, иначе не отобразиться переменная, вылетит ошибка, взорвется пара вертолетов и так далее. Нет, я серьезно, не забывайте об этом.

Можно использовать как в скриптах (в классах-потомках Scene_Base) и на карте через "Вызов скрипта".

Скриншот:


Демка:
yadi.sk/d/C3vAhyWNiGZRq

Код:
=begin
  Пример использования:
  1. Добавить в ивент команду "Вызвать скрипт"
  2. Скопировать туда следующий код:
    show_var 1,0,0,"Variables[1]=%d"
=end
class Scene_Base
  FONT_NAME = ["Times New Roman","Arial"]
  FONT_SIZE = 32
  FONT_COLOR = {
    :red      => 255,
    :green    => 174,
    :blue     => 0,
    :opacity  => 255
  }
 
  def show_var(id,x,y,title="%d",color=nil)
    @spr||=[]
    @spr[id]||={
      :sprite     =>  nil,
      :origtitle  =>  "%d",
      :title      =>  "%d",
      :value      =>  nil,
      :color      =>  nil
    }
    @spr[id][:value]      = $game_variables[id]
    @spr[id][:origtitle]  = title
    @spr[id][:title]      = format(@spr[id][:origtitle],@spr[id][:value])
 
    @spr[id][:sprite] = Sprite.new if @spr[id][:sprite].nil?
    @spr[id][:sprite].x = x
    @spr[id][:sprite].y = y
    @spr[id][:sprite].z = 250
 
    @spr[id][:sprite].bitmap.dispose if !@spr[id][:sprite].bitmap.nil?
    temp = Bitmap.new(640,480)
    w = temp.text_size(@spr[id][:title]).width
    h = temp.text_size(@spr[id][:title]).height
    temp.dispose
 
    @spr[id][:sprite].bitmap = Bitmap.new(w+16,h+16)
    @spr[id][:sprite].bitmap.font.name = FONT_NAME
    @spr[id][:sprite].bitmap.font.size = FONT_SIZE
    if !color.is_a? Color
      @spr[id][:sprite].bitmap.font.color = Color.new(FONT_COLOR[:red],
      FONT_COLOR[:green],FONT_COLOR[:blue],FONT_COLOR[:opacity])
    else
      @spr[id][:color] = color
      @spr[id][:sprite].bitmap.font.color = @spr[id][:color]
    end
    @spr[id][:sprite].bitmap.draw_text(Rect.new(0,0,w,h),@spr[id][:title])
  end
 
  alias before_vars_update update
  def update
    before_vars_update
    if !@spr.nil?
      for id in 1..999
        next if @spr[id].nil?
 
        if $game_variables[id]!=@spr[id][:value]
          @spr[id][:value] = $game_variables[id]
          @spr[id][:title] = format(@spr[id][:origtitle],@spr[id][:value])
          w = @spr[id][:sprite].bitmap.text_size(@spr[id][:title])
 
          if w.width > @spr[id][:sprite].bitmap.width
 
            temp = Bitmap.new(640,480)
            wb = temp.text_size(@spr[id][:title]).width*FONT_SIZE/16
            hb = temp.text_size(@spr[id][:title]).height*FONT_SIZE/16
            temp.dispose
 
            @spr[id][:sprite].bitmap = Bitmap.new(wb+16,hb+16)
            @spr[id][:sprite].bitmap.font.name = FONT_NAME
            @spr[id][:sprite].bitmap.font.size = FONT_SIZE
            if !@spr[id][:color].is_a? Color
              @spr[id][:sprite].bitmap.font.color = Color.new(FONT_COLOR[:red],
              FONT_COLOR[:green],FONT_COLOR[:blue],FONT_COLOR[:opacity])
            else
              @spr[id][:sprite].bitmap.font.color = @spr[id][:color]
            end
            @spr[id][:sprite].bitmap.draw_text(Rect.new(0,0,wb,hb),@spr[id][:title])
          end
        end
 
      end# end for
    end# end if
  end
 
  alias before_vars_terminate terminate
  def terminate
    before_vars_terminate
    return if @spr.nil?
    @spr.each{|spr|
      spr.bitmap.dispose
      spr.dispose
    }
  end
end
 
class Game_Interpreter
  def show_var(*args)
    SceneManager.scene.show_var(*args)
  end
end
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: strelokhalfer, Демий, Amphilohiy, Zoom, igo12

Отображение значения переменных в игре 8 года 9 мес. назад #83790

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • ОраторПобедитель Сбитой кодировкиПрограммист RubyУчитель2 место Готв
Я правильно понимаю, что ты перерисовываешь все битмапы каждый кадр?
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: strelokhalfer

Скрипт для переменных 8 года 9 мес. назад #83791

  • igo12
  • igo12 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 32
  • Спасибо получено: 32
  • Проект месяца 1 местоПроект месяца 2 место
DeadElf79 пишет:
Допилил также поддержку смены цвета, в константе FONT_COLOR указаны цвета по умолчанию. Пример использования - в демке. Свой цвет добавлять не обязательно!

Да, эльф уже просто психанул, раз пилит демку к этому скрипту.

Большое вам спасибо теперь всё ок!
Проблема видимо в том что я делал так:
show_var 1,0,0,"Variables[1]=%d"
а нужно было так
show_var(1,0,0,"Variables[1]=%d")
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 9 мес. назад #83792

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • ОраторПобедитель Сбитой кодировкиПрограммист RubyУчитель2 место Готв
igo12 пишет:
DeadElf79 пишет:
Допилил также поддержку смены цвета, в константе FONT_COLOR указаны цвета по умолчанию. Пример использования - в демке. Свой цвет добавлять не обязательно!

Да, эльф уже просто психанул, раз пилит демку к этому скрипту.

Большое вам спасибо теперь всё ок!
Проблема видимо в том что я делал так:
show_var 1,0,0,"Variables[1]=%d"
а нужно было так
show_var(1,0,0,"Variables[1]=%d")

В Руби скобки для вызова метода необязательны, по идее дело не в этом. Неоднозначностей в этой сроке тоже не видно. Хотя если дело в этом, то это действительно любопытно
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.

Отображение значения переменных в игре 8 года 9 мес. назад #83794

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 1 место в ГотвВетеранОрганизатор конкурсовПроект месяца 2 местоУчитель3 местоПроект месяца 1 местоПисатель 3 местоПрограммист Ruby
Амфи, ты неправильно понимаешь, я перерисовываю их только в том случае, если значение переменной изменилось.

Смотри строку в алиасе апдейта
if $game_variables[id]!=@spr[id][:value]
Последнее редактирование: 8 года 9 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Amphilohiy

Отображение значения переменных в игре 8 года 9 мес. назад #83795

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • ОраторПобедитель Сбитой кодировкиПрограммист RubyУчитель2 место Готв
Все, увидел. Просто я ориентировался на $game_map.need_refresh (который переключается на true, при смене любого значения переменной).
Теперь хочется только к
for id in 1..999
придраться, но я пожалуй пойду.
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

Отображение значения переменных в игре 8 года 9 мес. назад #83796

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 1 место в ГотвВетеранОрганизатор конкурсовПроект месяца 2 местоУчитель3 местоПроект месяца 1 местоПисатель 3 местоПрограммист Ruby
Амфи, не придумал ничего оригинальнее и надежнее, к сожалению ^_^
Администратор запретил публиковать записи гостям.

Отображение значения переменных в игре 8 года 9 мес. назад #83797

  • Amphilohiy
  • Amphilohiy аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 547
  • Спасибо получено: 666
  • ОраторПобедитель Сбитой кодировкиПрограммист RubyУчитель2 место Готв
Ну тот же
@spr.each do |value| end
Или с индексом (хотя вроде ты ко всему по индексу обращаешься, можно было бы хоть в переменную вынести)
@spr.each_with_index do |value, index| end
Или с удалением устаревших (требует вернуть true, хотя вроде тоже не удаляется)
@spr.reject! do |value| false end
Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

Скрипт для переменных 8 года 9 мес. назад #83800

  • igo12
  • igo12 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 32
  • Спасибо получено: 32
  • Проект месяца 1 местоПроект месяца 2 место
Большое спасибо автору.
Замечательный скрипт уникальный в своём роде но есть пара вопросов.
Есть ли возможность выключить данный скрипт кодом когда ненужен или привязать к переключателю?
Можно ли задать жирный текст?
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 9 мес. назад #83807

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • 1 место в ГотвВетеранОрганизатор конкурсовПроект месяца 2 местоУчитель3 местоПроект месяца 1 местоПисатель 3 местоПрограммист Ruby
Над эффектами вроде жирности и курсива не поработал, но могу добавить, чтобы были. Это, конечно, увеличит количество настроек, которые можно задать при вызове метода show_var, но, надеюсь, сильно сложным он от этого не станет.

Насчет выключения отображения немного сложнее, я подумаю, как это сделать и допишу код.
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 9 мес. назад #83808

  • strelokhalfer
  • strelokhalfer аватар
  • Вне сайта
  • Архитектор Миров
  • Знатный грамотей
  • Сообщений: 1640
  • Спасибо получено: 1078
  • 2 место Сбитая кодировкаПрограммист RubyОрганизатор конкурсовДаритель СтимкеяПереводчик2 место
Элф, говорю же, пресеты сделай.
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.239 секунд