Войти на сайт

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

ТЕМА: Делаем мини-игру с полоской без плагинов

Делаем мини-игру с полоской без плагинов 1 мес. 2 нед. назад #118711

  • 2Oth_Century_boi
  • 2Oth_Century_boi аватар
  • Вне сайта
  • Бывалый
  • А вот и нет, добро – вещь обратно пропорциональная злу.
  • Сообщений: 82
  • Спасибо получено: 100
  • Учитель
Здравствуйте, форумчане!)) Посмотрел я что такое эти ваши плагины. Вроде прикольно, но на ивентах же тоже можно. :unsure:
По этому сегодня я повторю плагин PressXManyTimes за авторством WhitePaper(пасибо за идею, кстати). Данный плагин, как я понял, добавляет мини игру с полосой, которая заполняется, когда мы долбим по кнопке на клавиатуре, и при этом она всё время опустошается. Суть мини-игры в том, что-бы "передолбить" полоску: не дать ей опустить и заполнить её.

В принципе, ничего сложного. Вот как это делается B)

Сначала мы рисуем саму полоску. Нужно нарисовать каждое состояние полоски на разных картинках, т.е. на первой картинке полоса пуста, на второй заполнена на 1/4, на третей на половину, а на последней заполнена полностью.(можно сделать так, что-бы использовать только 2 картинки, при этом полоска будет очень плавная, но об этом расскажу позже)
Примеры [ Нажмите, чтобы развернуть ]


А вот я нарисовал 11 картинок:


(не обращайте внимания на "101.png", оно нужно для того способа в двумя картинками)

Теперь загружаем наши картинки в проект. Как загрузили, идём в Common Events.
Там создаём ивент самой полоски. Создаём цикл, а в цикл помещаем Fork Conditions, он же мейкеровский оператор if.


Оператор пусть будет проверить переменную, которую я назвал "долбёжка". Эта переменная будет хранить значение заполненности полосы. Раз у меня 10 кадров для полосы(не считая картинки полностью пустой полосы), то и значение максимума путь будет 10. Пишем, пусть оператор срабатывает когда переменная равна 10. Также убираем галочку с "Add ELSE Case", это нам не нужно.


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


Далее, вставляем в тело оператора ивент, показывающий картинку полностью заполненной полосы(ведь когда переменная равно 10, то полоса заполнена полностью)


А теперь копируем Fork Conditions и вставляем его в тело цикла 10 раз(чтобы их стало 11)!


И далее приводил всё в прядок. Нужно сделать, чтобы последующие операторы срабатывали на более низкие значения переменной и выводили картинку с менее заполненной полосой. То есть, второй оператор будет срабатывать на значение переменной 9 и показывать картинку с полосой, заполненной на 9/10, третий сработает на значение восемь и покажет полосу с значением 8/10 и т.д. Если у вас максимальное значение больше, чем количество кадров полосы, то нужно в операторах указывать верхнюю границу срабатывания этого оператора и ставить типа сравнения "below", он же меньше или равно. Важно, операторы должны быть расставлены по убыванию их измеряемой границы, т.е. вверху оператор который срабатывает на значение 100 или ниже, оператор под ним на 90 или ниже, а самый последний сработает на 0 или ниже.



Потом в самом ниpу, но внутри цикла ставим минимальную задержку. Она нужна, что-бы не перегрузить движок и всё работало.


И так, мы уже сделали ивент для отображения полоски, но теперь нужен ивент, который будет уменьшать полосу. Он делается очень просто. Создаём новый Common Event, я его назвал "Сопротивление", он также параллельный и срабатывает на тот-же переключатель. В него впихиваем цикл, в цикл впихиваем строку уменьшающую переменную и задержку. С помощью них мы будем настраивать скорость уменьшения полоски. У меня это -1 единица за 2 децисекунды.


Вот и всё! Осталось создать ивент, который будет запускать саму мини-игру.
Создаём событие карты. Так как я сделаю это в проекте, в котором я мапил со своей графикой для конкурса, то путь графикой это события будет АннТенна)) :laugh: В первой строке события мы устанавливаем стартовое значение переменной. Далее мы включаем переключатель, запускающий те наши два ивента. Потом цикл, в цикле задержка, пропускаемая нажатием клавиатуры, и увеличение переменной за один проход цикла(одно нажатие), у меня это 1.
Всё! можно запускать игру и тестить!


Забавно кстати, две Аньки)))


Вот мы клацнули на событие и, о чудо, оно работает!

Чтобы мы ещё могли выигрывать или проиграть, то это нужно дополнительно прописать в событии на карте. А конкретно, выключить переключатель, прервать цикл(аналогично поражение). И это всё нужно делать перед сообщением о победе, иначе полоска будет уменьшаться и будет не круто. Ещё я сделал, что при победе событие АннТенны упрыгивает вправо))
Гифка [ Нажмите, чтобы развернуть ]


Но вдруг нам нужна очень плавная полоса, но делать 100 картинок мы не хотим? Есть способ сделать это всего на двух картинках!

Нам нужна полностью пустая полоса:


И просто сама полоса без контура:


Загружаем их в проект и идём в Common Events. Создаём новый ивент для новой полосы(не забываем создать новый переключатель для него). Там делаем цикл, в нём отображение этих двух изображений и миним. задержку. У изображений, когда выводим их, можно указать его номер, так вот, у изображения с гранями полосы номер должен быть больше, чем у той, которая с полоской. У той, что с гранями, координаты не трогаем, а вот с полосой, которая без контура, нужно пошаманить.


И так, пусть координатой X изображения полосы будет наша та самая переменная. Координата Y всегда должна быть равна 120, это мы запишем в переменную, которую я назвал "коорды".


Вот мы и сделали полосу! Осталось настроить ивент, вызывающий её. И да, нужно также поменять переключатель, который вызывает уменьшение полосы на новый, который также включает саму полосу.
В событии карты нужно дополнительно поставить выставить значение "коордам", оно всегда и у всех(на мейкерах 2000 и 2003) должно быть 120. Также, чтобы полоса стартовала в начале, нужно указать стартовое значение переменной -160. Ну вот и всё, можно проверять!

Гифка [ Нажмите, чтобы развернуть ]


Минусом последнего способа является то, что полоса всегда будет полностью пуста при значении переменной -160, будет заполнена на половину при 0 и будет заполнена полностью при 160, и это никак не изменить. Если вы хотите полосу с изменяемым размером, то нужно использовать первый способ. Вообще, уже 20 картинок дают неплохую плавность.

Фух, я это написал!! :woohoo:
Спасибо всем, кто читал!


1 IQ: while(true)
110 IQ: while(!false)
9999 IQ: while((true || false) && !false)
Последнее редактирование: 1 мес. 2 нед. назад от 2Oth_Century_boi. Причина: Написал о минусе последнего способа
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, Pandarius, ZX_Lost_Soul, Phileas, WhitePaper, SeaWolf, Noxmils
Время создания страницы: 0.218 секунд