Войти на сайт

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

ТЕМА: Делаем мини-игру "останови полоску где нужно"

Делаем мини-игру "останови полоску где нужно" 1 мес. 2 нед. назад #118806

  • 2Oth_Century_boi
  • 2Oth_Century_boi аватар
  • Вне сайта
  • Бывалый
  • А вот и нет, добро – вещь обратно пропорциональная злу.
  • Сообщений: 83
  • Спасибо получено: 106
  • Учитель
Здрасте, форумчане. Мне пришла в голову идея для ещё одной мини-игры. Тоже с полоской. В чём суть: короткая полоса болтается туда-сюда, также на заднем фоне есть полоса другого цвета, которая стоит. И суть в том, что мы должны нажать на кнопку и остановить полосу на другой полосе. (Если ничего не понятно, то можно пролистать вниз и посмотреть гифку.)
А сейчас я покажу как таки сделать эту мини-игру :)

И так, для начала мы должны нарисовать сам кусок полосы во всех её состояниях. То есть вот так, как под спойлером:
Примеры [ Нажмите, чтобы развернуть ]


Я нарисовал 21 штуку.


И так, загружаем наши картинки. А потом идём в Common Events. Там создаём 2 ивента. Один из них будет отвечать за движение полосы, а другой за её отображение. И! Внимание! Для правильной работы событие отображения должно быть ниже по списку события движения! Также, оба этих события должны быть параллельным процессом, и запоскаться одним переключателем, который я назвал "Старт движения"(движения полосы, в смысле).


В ивенте создаём цикл. В цикле прописываем "Fork Condition"(a.k.a. оператор if). Убираем галочку с "Add ELSE". Оператор будет анализировать переменную "Позиция", которая обозначает в каком месте находиться полоса. Ставим, чтобы он реагировал на то, что переменная равна 1.


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


Далее копируем оператры так, чтобы их количество было равно количеству кадров полосы. В моём случает это 21.


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



Теперь нужно сделать механизм, который разворачивает полосу при достижении края. Пусть за направление отвечает переключатель под названием "Реверс". Если он включён, то полоса движется влево, если нет, тов право. То есть, достигая макс. значения мы должны включить этот переключатель, а при достижении минимума выключить. Создаём оператор if a.k.a. fork condition. Он будет реагировать на максимальное значение или выше. Т.е. Ставим 21 и тип сравнения "above". Внутрь оператора пихаем строку включающую переключатель. Делаем второй оператор, реагирующий на значение 1 и ниже. Т.е. Ставим в него 1 и тип сравнения "below". В тело помещаем строку, выключающую переключатель.


А теперь ставим минимальную задержку. Думаете, минимальная задержка это 1/10 секунды? Нееее! :mad: Минимальная задержка это 0.0 секунды! Чтобы её вставить, просто жмём "wait", и в строку со временем пишем 0. Кто-то спросит: "зачем ставить задержку на 0 секунд, если будет такой же эффект, как и если задержки бы не было?" А я отвечу, задержка как раз таки есть. Если бы задержки не было, то движок бы перегрузился, а при задержке в 0.0 секунд движок не перегружается.
Вот мы и закончили с ивентом отображения, переходим к ивенту движения.


С событием движения всё очень просто. Создаём цикл. В цикл приписываем оператор if, который анализирует переключатель "Реверс". Тут нам уже нужно поставит галочку в пункт "Add ELSE Case". Под сам оператор прописываем строку, уменьшающую переменную "Позиция" на 1. А под Else прописываем строку, увеличивающую переменную на 1. Далее прописываем мега-задержку на 0.0 секунд.
Вот и всё, мы написали все Common Events.



Теперь нам нужно сделать само поле, на котором нужно остановить полоску. Я его сделал достаточно просто, я взял кадр полосы, которая находится на той позиции, на которой она и должна остановиться. Т.е. Я хочу, чтобы это поле находилась на позиции 10, я взял кадр, где полоса находиться на этой позиции, удалил края и перекрасил саму полосу. По желанию можно изменить размер этого поля, но его размер должен быть кратен размеру самой полосы.


Теперь осталось создать событие карты для запуска мини-игры. В самом начале выставляем начальное значение переменной положения полосы. Далее включаем переключатель, запускающий мини-игру. Потом отображаем изображение этого самого поля, на котором нужно становить полосу(напоминаю, что номер изображения с полем должен быть ниже номера самой полосы). И ставим задержку до нажатия клавиши. В этот самый момент полоса начинает движение. И нажатием клавиши мы должны её остановить: прописываем дальше выключение переключателя мини-игры. Потом прописываем Fork Conditions, который анализирует положение полосы после остановки. В моём случае, он срабатывает, если полоса в позиции 10(т.е. находиться на поле). И если он срабатывает, то нам показывается сообщение о победе, иначе сообщение о проигрыше. Если бы поле было шире в 2 разе в право, то я бы добавил ещё оператор, срабатывающий, если полоса на позиции 11. Аналогично с другими ситуациями.
(и ещё, у меня начало стоит оператор, а только потом уже отключение движения полосы, так делать можно, но это займёт больше места).


Теперь запускаем игру, и смотрим работает ли. Если всё сделано правильно, то всё должно работать.

Вот такая бешеная полоса получилась)) Тут я 1 минуту пытаюсь победить:
гифка [ Нажмите, чтобы развернуть ]


Есть второй способ, на координатах и всего трёх картинках.

И так, вот какие 3 картинки нам нужны:

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

Изображение поля, в котором и нужно остановить полосу.

Изображение самой рамки для полосы.


И так, отправляемся в Common Events.
Событие движения менять не нужно. Единственное, я увеличил число, на которое увеличивается переменная за один проход цикла.


А в событии отображения нужно удалить все операторы, кроме двух последних, которые изменяют направление полосы. В цикл, в самый верх вставляем строку отображения рамок полосы. Ниже, прописываем строку, отображающую изображение полосы. Привязываем координату X к переменной движения, а координату Y к переменной "коорды", эта переменная должна быть равна 120, мы её будем заполнять в событии карты, но будет лучше, если заполнить её прямо в общем событии(но я этого не сделал). Ещё, номер изображения рамки должен быть больше номера полосы. Также, нужно оставить номер, который будет меньше всех остальных, он будет нужен для поля, на котором мы должны остановить полоску. И по поводу координат: если на изображениях полосы находятся слева, то при координате X=160 полоса будет слева, а при координате Х=480-ширина полосы полоса будет справа.



Нужно ещё настроить операторы. В тот, которые срабатывает на значение больше допустимого, ставим значение равное 480-ширина полосы. Типа сравнения оставляем "above". А в тот, что срабатывает на значение меньше допустимого, ставим 160, тип сравнения оставляем "below".


С Common Events всё. Отправляемся в события карты. Я просто скажу, за что отвечает каждая строка. В первой строке мы даём переменной "коорды" значение 120, эта переменная успользуеться вместо координаты Y. Во второй строке выставляем стартовое значение положения полосы. В третей и четвёртой строке в переменные записываем верхнюю и нижнюю границы поля, в котором нужно остановить полосу. Нижняя граница может быть равна любому допустимому числу, а верхняя равна сумме нижней границы и ширины самого поля. В пятой, пишем строку отображения самого поля. В координату X ставим переменную "нижняя граница", а в Y ставим переменную "коорды". И не забываем, что номер картинки с полем должен быть меньше номера остальных картинок!
картинка [ Нажмите, чтобы развернуть ]

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

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


Вот и конец туториала, спасибо всем, кто читал! :laugh:


1 IQ: while(true)
110 IQ: while(!false)
9999 IQ: while((true || false) && !false)
Последнее редактирование: 1 мес. 2 нед. назад от 2Oth_Century_boi.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, AnnTenna, Lemmy, Noxmils, RobotD

Делаем мини-игру "останови полоску где нужно" 1 мес. 2 нед. назад #118809

  • 2Oth_Century_boi
  • 2Oth_Century_boi аватар
  • Вне сайта
  • Бывалый
  • А вот и нет, добро – вещь обратно пропорциональная злу.
  • Сообщений: 83
  • Спасибо получено: 106
  • Учитель
Добавил способ как это сделать на координатах и 3 картинках


1 IQ: while(true)
110 IQ: while(!false)
9999 IQ: while((true || false) && !false)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dmy, RobotD
Время создания страницы: 0.211 секунд