Отображение значения переменных в игре

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
10 года 9 мес. назад #83789 от DeadElf79
Отображение значения переменных в игре

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

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

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

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

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

Скриншот:


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

Код:
Code:
=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

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

Программист Ruby 2 место Готв Победитель Сбитой кодировки Учитель Оратор
Больше
10 года 9 мес. назад #83790 от Amphilohiy
Я правильно понимаю, что ты перерисовываешь все битмапы каждый кадр?

Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Спасибо сказали: strelokhalfer

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

Проект месяца 1 место Проект месяца 2 место
Больше
10 года 9 мес. назад #83791 от igo12
igo12 ответил в теме Скрипт для переменных

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

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


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

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

Программист Ruby 2 место Готв Победитель Сбитой кодировки Учитель Оратор
Больше
10 года 9 мес. назад #83792 от Amphilohiy

igo12 пишет:

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

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


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


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

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

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

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
10 года 9 мес. назад - 10 года 9 мес. назад #83794 от DeadElf79
Амфи, ты неправильно понимаешь, я перерисовываю их только в том случае, если значение переменной изменилось.

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

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

Программист Ruby 2 место Готв Победитель Сбитой кодировки Учитель Оратор
Больше
10 года 9 мес. назад #83795 от Amphilohiy
Все, увидел. Просто я ориентировался на $game_map.need_refresh (который переключается на true, при смене любого значения переменной).
Теперь хочется только к
Code:
for id in 1..999
придраться, но я пожалуй пойду.

Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Спасибо сказали: DeadElf79

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

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
10 года 9 мес. назад #83796 от DeadElf79
Амфи, не придумал ничего оригинальнее и надежнее, к сожалению ^_^

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

Программист Ruby 2 место Готв Победитель Сбитой кодировки Учитель Оратор
Больше
10 года 9 мес. назад #83797 от Amphilohiy
Ну тот же
Code:
@spr.each do |value| end
Или с индексом (хотя вроде ты ко всему по индексу обращаешься, можно было бы хоть в переменную вынести)
Code:
@spr.each_with_index do |value, index| end
Или с удалением устаревших (требует вернуть true, хотя вроде тоже не удаляется)
Code:
@spr.reject! do |value| false end

Я верю, что иногда компьютер сбоит, и он выдает неожиданные результаты, но остальные 100% случаев это чья-то криворукость.
Спасибо сказали: DeadElf79

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

Проект месяца 1 место Проект месяца 2 место
Больше
10 года 9 мес. назад #83800 от igo12
igo12 ответил в теме Скрипт для переменных
Большое спасибо автору.
Замечательный скрипт уникальный в своём роде но есть пара вопросов.
Есть ли возможность выключить данный скрипт кодом когда ненужен или привязать к переключателю?
Можно ли задать жирный текст?

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

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
10 года 9 мес. назад #83807 от DeadElf79
Над эффектами вроде жирности и курсива не поработал, но могу добавить, чтобы были. Это, конечно, увеличит количество настроек, которые можно задать при вызове метода show_var, но, надеюсь, сильно сложным он от этого не станет.

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

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

Программист Ruby Организатор конкурсов Даритель Стимкея 2 место Сбитая кодировка Переводчик 2 место
Больше
10 года 9 мес. назад #83808 от strelokhalfer
Элф, говорю же, пресеты сделай.

"Стрелок, что-то ты неочень похож на свой аватар..."(с)

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

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