Войти на сайт

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

ТЕМА: RMMV Графика для событий

RMMV Графика для событий 6 года 3 мес. назад #101400

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • Программист JavaScript УчительДаритель СтимкеяОрганизатор конкурсов2 место Оратор
Всем привет!

Сегодня мне бы хотелось рассказать об одной своей новой поделке, а именно о скрипте для RPG Maker MV — «MUR Event Graphics».

Изначально данный скрипт задумывался для того, чтобы дать возможность немного смещать графику событий, относительно центра.

По правде говоря, мне уже порядком поднадоело перерисовывать по десять раз одни и те же картинки каждый раз подгоняя, а достаточно ли теперь стоит тумбочка близко к стене или же её ещё надо подвинуть на пару пикселей. Или же делать несколько вариантов, когда книжка лежит с одного края стола, а теперь она ближе к другому краю, а вот на кровати она вообще должна быть по центру и выше итд.

Конечно в интернете уже достаточно «обсосали» и не раз эту тему «смещения графики событий» и был написан не один скрипт, как и для VX Ace, так и для MV, но мне всё же захотелось сделать свой вариант и на это были причины.

Во всех ранее предложенных вариантах была примерна одна и та же схема. В начале события создаются комментарии в которых описываются настройки, как и куда смещать нашу картинку события. По сути у меня такая же схема, задаём команду с параметрами и вуаля.

comments.png


Начнём с первой команды, собственно команды смещения графики — <move_event_gfx_to: x, y, z>. Как не трудно догадаться x и y это смещение по горизонтали и вертикали соответственно. Причём можно задать отрицательные числа и картинка будет смещена в противоположную сторону. Меняя значение z можно задать номер слоя и, картинка может оказаться как за игроком, так и над ним (не меняя основные свойства события — «priority»).

Следующая идея была немного «оживить» графику события. В моей игрушке есть дирижабль, который стоит на привязи, но слегка колышется вверх-вниз.

Изначально у меня было отрисовано три кадра с положением, и они циклически сменялись. Выглядело это не очень, кадров мало, возни много. И тут пришла в голову идея, что было бы очень классно, если бы картинка с дирижаблем «болталась» сама по себе без участия покадровой анимации.

zeppelin.gif


Так появилась команда — <slide_event_vertical: size, speed>. Как ясно из названия это скольжение, а если быть точнее, то циклическое движение с эффектом маятника. По краям движение затухает, пока не сменит направление, а в середине максимально ускоряется. В параметрах можно задать размер зоны движения — size, ну и скорость движения «объекта» — speed.

Команда <slide_event_horizontal size, speed> повторяет предыдущую, лишь с той разницей, что движение (мотание) происходит уже горизонтально.

Возможно многие замечали, что в RPG Maker MV очень много всяких мелких недочётов, они не влияют на игровой процесс, но это как песок в сандалиях, ходить не мешает, но весьма неприятно.

К такому вот «песочку» относится момент, когда персонаж заходит в какую-нибудь дверь. Меня вот очень раздражает, что он как бы входит, но при этом верхняя часть головы постоянно задевает за дверной косяк. Конечно можно нарисовать дверь чуть больше, нарисовать какую-нибудь специальную анимацию, но мне захотелось решить это вопрос раз и навсегда.

Идея заключается в следующем: например, берём событие с дверью, и добавляем к нему две дополнительные картинки. Одна располагается за событием (дверью), другая поверх события.

house_parts.png


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

Когда персонаж заходит в дверь, он оказывается между двумя картинками и уже «не стукается головой», а спокойно проходит в дверной проём.

house.gif


У этой идеи есть ещё один плюс. Во-первых, в тайлах вместо элементов (или даже целого) здания остаётся свободное место под другие элементы декора, а во-вторых теперь здания можно делать более уникальными (красивыми, разнообразными), они не привязаны ни к сетке тайлов, ни к размерам, ни к тем более положению (дверь всегда по центру).

Ну и собственно сами команды — <set_event_bg_gfx: bitmap, offsetX, offsetY> и <set_event_fg_gfx: bitmap, offsetX, offsetY>. Первая (bg) задаёт фоновую картинку, вторая соответственно переднюю. В bitmap указывается имя картинки, которая будет подгружена из img/events/, а offsetX, offsetY её смещение относительно центра события, например, если мы всю туже дверь захотим сместить.

Следующая идея была сделать если не полноценную, то хотя бы упрощённую анимацию. Сейчас, например, можно сделать анимацию у события следующим образом. Наклепать кучу вкладок (шагов) события с привязкой к значению какой-нибудь переменной. Переходим на новый шаг, меняется картинка, меняем переменную, выжидаем паузу и хоп на следующем опросе «системой» у нас новая картина. Ну и конечно всё это должно быть в режиме «parallel» (параллельно).

animation.png


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

Для того, чтобы избавить себя от этого «дурдома» с кадрами, была придумана команда — <animation_event_start: frames, pause, reverse>. Данная команда поэтапно показывает кадры события начиная с вниз 1, вниз 2, вниз 3, влево 1, влево 2,… итд. Количество кадров можно ограничить, задав параметр — frames. Задержку перед очередной сменой кадра можно задать в pause. Дойдя до последнего кадра, анимация начнётся вновь с первого кадра (вниз 1), но если задать reverse — true, то анимация продолжится в обратном порядке.

mill.gif


Можно конечно было бы сделать возможность и задавать внешний файл с кадрами анимации, и задавать произвольную последовательность кадров, но по правде говоря мне очень не хотелось сильно усложнять плагин, тем более, что в нём и так всё очень непросто.

В качестве продолжения идеи со «скольжением» картинки, получилась ещё одна команда — <jump_event: hight, speed>. Как не трудно догадаться из названия, картинка будет прыгать. Например, во многих аркадных играх это различные звёздочки, монетки и другие плюшки. Параметр hight задаёт как высоко будет прыгать картинка, а speed соответственно насколько это будет быстро происходить.

В дополнении к «прыжкам» есть ещё одна команда — <set_event_shadow_to: bitmap, offsetX, offsetY>. Данная команда добавляет позади нашего события ещё одну картинку и работает в паре с slide_event_vertical или jump_event. В отличии от того же set_event_bg_gfx данная картинка подвергается дополнительным изменениям.

coin.gif


Например, задав в качестве bitmap изображение тени (которое также будет загружено из img/events/), оно будет изменять свой размер и прозрачность (уровень alpha) в зависимости от позиции картинки slide_event_vertical или jump_event. Чем выше картинка события, тем меньше картинка тени и соответственно она менее видна, чем картинка опускается ниже, тем тень становится больше и более заметна.

Всё это конечно же мелочи, но в целом, я думаю, они сделают вашу игру более привлекательной, а процесс её создания менее утомительным. Скачать свежую версию плагина всегда можно с github.

Удачи и творческих успехов!
Последнее редактирование: 6 года 3 мес. назад от Mur.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, ZX_Lost_Soul, Kouta555, Seibur, DK, poca, yuryol, Cabbit, Paranoid, VarVarKa и еще 3 пользователей

RMMV Графика для событий 6 года 3 мес. назад #101401

  • akito66
  • akito66 аватар
  • Вне сайта
  • Светлый дракон
  • В Иркутске пески холодные, но когда ты рядом, мне становится теплее.
  • Сообщений: 835
  • Спасибо получено: 1487
  • Даритель СтимкеяПаладинРазработчикВетеранПроект месяца 2 местоКомпозиторПроект месяца 3 местоОрганизатор конкурсовУчительОратор
К сожалению сижу на VX ace. Но думаю это отличная вещь! Мур спасибо за столь грандиозные вещи!!!
Администратор запретил публиковать записи гостям.

RMMV Графика для событий 6 года 3 мес. назад #101405

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • Программист JavaScript УчительДаритель СтимкеяОрганизатор конкурсов2 место Оратор
akito66 пишет:
К сожалению сижу на VX ace.

Ну, у всего есть свои плюсы и минусы :) Ruby всё-таки засложен, как для меня. Так что врядли у меня будут какие-нибудь поделки для VX Ace. Впрочем не буду загадывать наперёд, всё может быть :silly:

akito66 пишет:
Но думаю это отличная вещь! Мур спасибо за столь грандиозные вещи!!!

Спасибо за добрые слова :blush:
Администратор запретил публиковать записи гостям.

RMMV Графика для событий 6 года 3 мес. назад #101486

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • Программист JavaScript УчительДаритель СтимкеяОрганизатор конкурсов2 место Оратор
К сожалению, совсем вылетело из головы, что такие объекты как Sprite, а тем более bitmap, нельзя создавать в объектах, которые потом будут сохранятся. Начиная ещё с VX Ace, RPG Maker очень нервничает, когда в файле сохранения появляются «крупные» объекты с непонятным содержимым. Так и получилось с Event’ами, ведь их состояние сохраняется в каждом файле сохранения игры, а вместе с ним и пытались сохраниться данные навешанных картинок.

Сейчас логика скрипта несколько переписана, спрайты и их картинки создаются в массивах плагина и никак не связаны с содержимым event’а. Игра успешно сохраняется и загружает состояние событий. Надеюсь больше никаких ляпов не вылезет ещё ~_~’

Обновлённая версия 1.1 как всегда доступна на github.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK, Cabbit

RMMV Графика для событий 6 года 3 мес. назад #101546

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • Программист JavaScript УчительДаритель СтимкеяОрганизатор конкурсов2 место Оратор
Пффф! К сожалению или к радости выявился ещё один досадный глюк, который был успешно исправлен :mad:

При обновлении сцены (например открыть/закрыть меню) все ивенты сцены зачем-то удаляются со сцены, а затем на нё же ещё раз и добавляются заново :silly: . Ну а по скольку мой скрипт считал, что у нас уже сцена построена и ничего перерисовывать не надо тихо и молчал.

Теперь при вызове метода Spriteset_Map.prototype.createCharacters элементам проставляется атрибут «а добавься ка ты на сцену ещё разок» *facepalm*.

Новая версия 1.2 как обычно на github.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK, Cabbit

RMMV Графика для событий 6 года 3 мес. назад #101552

  • Paranoid
  • Paranoid аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 688
  • Спасибо получено: 350
А не будет ли скрипт слишком часто добавлять элементы на сцену?
Администратор запретил публиковать записи гостям.

RMMV Графика для событий 6 года 3 мес. назад #101553

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • Программист JavaScript УчительДаритель СтимкеяОрганизатор конкурсов2 место Оратор
Paranoid пишет:
А не будет ли скрипт слишком часто добавлять элементы на сцену?

нет, он вызывается, только тогда, когда сама система удаляет и создаёт новый список (childs) ивентов на сцене.
А это как правило только при открытии другой сцены (например того же меню). При выводе того же окна с сообщениями этого не происходит.
Последнее редактирование: 6 года 3 мес. назад от Mur.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK

RMMV Графика для событий 6 года 3 мес. назад #101555

  • DK
  • DK аватар
  • Вне сайта
  • Светлый дракон
  • DKPlugins
  • Сообщений: 946
  • Спасибо получено: 1129
  • Даритель Стимкея2 место УчительПроект месяца 2 местоОраторРазработчикПрограммист RubyПрограммист JavaScript Проект месяца 3 местоПаладин
Mur пишет:
При обновлении сцены (например открыть/закрыть меню) все ивенты сцены зачем-то удаляются со сцены, а затем на нё же ещё раз и добавляются заново :silly:

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

RMMV Графика для событий 6 года 3 мес. назад #101556

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • Программист JavaScript УчительДаритель СтимкеяОрганизатор конкурсов2 место Оратор
DK пишет:
все объекты создаются заново.

Логику авторов мне понять сложно. :unsure:

DK пишет:
Но есть еще метод refresh у $gameMap кажется, который просто обновляет события на текущей карте.

А это уже не важно, кто бы не «дёргал» сцену, как только будут созданы ивенты заново, мои картинки автоматически добавятся на сцену вновь.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK

RMMV Графика для событий 6 года 3 мес. назад #101567

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • Программист JavaScript УчительДаритель СтимкеяОрганизатор конкурсов2 место Оратор
И ещё одно обновление от 6 января 2018 г.:

И всё-таки я балда! (≕>‿(“”) В ходе тестирования плагина, выяснилось что привязка к createCharacters была не самой лучшей идеей. При повторном вызове шага события, например, сменились условия и мы вернулись на первый шаг, createCharacters вызываться не будет, так как сцена не менялась!! Для этого гораздо лучше подойдёт метод Game_Event.prototype.setupPage который вызывает первый раз при создании(изменении шага) самого события на карте.

Уффф! Надеюсь это последняя проблема ~_~’ Исправленная версия 1.3 как обычно на github. В качестве плюшки, плагин можно посмотреть в действии online собирая монетку. Это заготовка для ещё одного плагина, но пока вот просто добавляется в карман ;)
Последнее редактирование: 6 года 3 мес. назад от Mur.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, DK, Cabbit

RMMV Графика для событий 6 года 3 мес. назад #101666

  • Mur
  • Mur аватар
  • Вне сайта
  • Светлый дракон
  • Мур? Мур! Мур.
  • Сообщений: 574
  • Спасибо получено: 1448
  • Программист JavaScript УчительДаритель СтимкеяОрганизатор конкурсов2 место Оратор
И очередное обновление от 8 января 2018 г.:

И снова здравствуйте! Мдэ, что-то этот плагин у меня прям совсем никак не получается, уже в печёнках эти ошибки. Снова пришлось переделать всю логику обновления графики событий. Теперь при выходе из боя пропадали картинки и тень. При переделке ещё что-то отвалилось, как в той истории «Нос вытащит — хвост увязит», так и у меня. Надеюсь теперь точно всё.

Исправленная версия, аж уже 1.4a всё так же доступна на github.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, Cabbit
Модераторы: NeKotZima
Время создания страницы: 0.269 секунд