Войти на сайт

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

ТЕМА: Картинки для интерфейса на карте (XP)

Картинки для интерфейса на карте (XP) 11 года 2 мес. назад #58902

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • Организатор конкурсовУчительОраторПрограммист RubyПроект года 3 местоВетеран3 местоПроект месяца 1 местоПроект месяца 3 местоПаладин
Для игры Imprizoned понадобилось показывать название текущей карты на экране.

Тигроглаз рассказывает про способ через события вот тут:
rmxp.tigerseye.uk.com/tutorial_amap4.shtml

Но это же надо прописывать событие на каждой карте, и, более того - нужно наделать столько же картинок, сколько карт, различающихся только текстом - названием области!

Поэтому, как обычно, ковыряем скрипты, а именно - class Spriteset_Map

в метод initialize добавим нашу карту сразу после тумана:
# картинка карты
@map_pic = Plane.new(@viewport3)
#@map_pic.z = 3010  # выше тумана (3000)

Необходимые пояснения.

Я добавил картинку карты на третий viewport3, который используется для вывода самого ближнего к зрителю контента, например, тумана или вспышки. Можно не париться и выводить в первый, но тогда надо вписать @map_pic.z = 3010 чтобы картинка была выше остальных элементов карты. То же самое верно для любого другого вашего интерфейса. Так как выше написано @viewport3.z = 5000, то, очевидно, контент в нем будет ближе всех.

В методе dispose убиваем картинку:
@map_pic.dispose

Осталось отрисовать. Для этого в методе update сразу после работы с туманом (fog) пишем следующее:
#map
@map_pic.bitmap = Bitmap.new(640, 480) # фишка в том, что картинку - источник пришлось на весь экран делать, иначе она размножается, и это я не смог побороть
 bitmap = RPG::Cache.picture("map") # тут сама картинка карты, она может быть мелкая  - просто расположим её в нижней части @map_pic.bitmap, оставив остальное прозрачным
@map_pic.bitmap.blt(4, 448, bitmap, Rect.new(0, 0, 24, 24)) # рисуем иконку
@map_pic.bitmap.font.color = Color.new(255, 255, 255, 255) 
@map_pic.bitmap.font.size = $fontsize_small 
@map_pic.bitmap.draw_text(32, 448, 200, 24, $game_map.name, 0) # пишем текст - название текущей (как в xp написали) карты.

Вот, собственно и все. Запускаем, тестируем. bitmap = RPG::Cache.picture("map") означает, что в папке Pictures игры должна валяться картинка map.png.

Таким же образом можно выводить другие элементы интерфейса, которые изменяются динамически, например, морду героя и полоску жизни рядом с ней либо через
Bitmap::stretch_blt(dest_rect, src_bitmap, src_rect[, opacity])
- картинку (красный прямоугольник) растягиваем на высчитанный через hp/maxHp * maxWidth прямоугольник

Либо просто закрашивая прямоугольник вот так:
Bitmap::fill_rect(x, y, width, height, color)

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

Вот как выглядит картинка в игре (кстати, гигантская тюрьма на скрине претерпела сильные изменения)

d1.png
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Irich5

Картинки для интерфейса на карте (XP) 11 года 2 мес. назад #58903

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

Картинки для интерфейса на карте (XP) 11 года 2 мес. назад #58905

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • Организатор конкурсовУчительОраторПрограммист RubyПроект года 3 местоВетеран3 местоПроект месяца 1 местоПроект месяца 3 местоПаладин
Сверху слева еще проще - вычислять координаты не надо.
Если почитать этот "урок" - то ясно, что хоть куда засунуть можно, и шрифт со цветом тоже настраивается влегкую (коммент к коду про шрифт не написал, но там из кода вроде ясненько).

А положение было такое у Тигроглаза, не стал трогать, тем более, что на моих картах, если комнатка маленькая, то обычно снизу остается темное пустое место, где заметна подпись.

Да, это карта с охранником, он переехал поближе к камерам. И (sic!) - до меня недавно дошло, что полочкам (слева) полагается висеть на стене! :laugh:

Сейчас мучаю, как говорит Анн, показывать, что происходит, а не описывать - то бишь некоторые миникатсценки; а из карт перепилил пока только семь, и то не до конца.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

Картинки для интерфейса на карте (XP) 11 года 2 мес. назад #58911

  • caveman
  • caveman аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1274
  • Спасибо получено: 1307
  • Организатор конкурсовУчительОраторПрограммист RubyПроект года 3 местоВетеран3 местоПроект месяца 1 местоПроект месяца 3 местоПаладин
Сделал таки проектик, лежит вот здесь:
rusfolder.com/35073334

Показал, как пример, что на одну картинку можно поместить кучу деталей интерфейса (кроме карты, подвесил еще морду Алекса и его бар с хп, рисуемый программно - чтоб потестить программность, встаньте на шипы).

Для удобства чтения сами методы отрисовки вынес в отдельный файл класса, естественно, инициализация и удаление
плоскостей int_pic и msg_pic остались в старом файле.

На отдельной плоскости msg_pic я рисую профиль героя в диалоге выше окна диалога (кто-то недавно спрашивал про подобное). Для этого я завел в Game_Temp переменную с названием текущего профиля @curr_msg_face и в событии разговора просто присваиваю ей название файла в Pictures и снимаю его:

$game_temp.curr_msg_face = 'alex'
... blah-blah-blah
$game_temp.curr_msg_face = ''

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Может проект и этот псевдоурок и не пригодится, зато кому-то станет понятно, как пользовать разные картинки для постоянной отрисовки интерфейса.

ЗЫ: картинка из тестового проектика

d2.png
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.375 секунд