Войти на сайт

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

ТЕМА: Движущиеся шипы

Движущиеся шипы 1 год 5 мес. назад #128051

  • Alx_Yago
  • Alx_Yago аватар
  • Вне сайта
  • Архитектор Миров
  • Сообщений: 1137
  • Спасибо получено: 2156
  • УчительПроект месяца 1 место3 место в Обучающем конкурсе3 местоПроект года 1 местоПаладинПроект года 3 место1 место в Обучающем конкурсеРазработчикОратор
1. В чём идея
Я решил сделать шипы, последовательно появляющиеся из соседних клеток. Вот как на этом ролике:



2. Графика для шипов
Я нарисовал чарсет для этих шипов (а то имеющиеся толстенькие конусы меня не очень устраивали):

Object3.png


3. Событие для шипов
Создаём событие, в котором устанавливаем графику для шипов и следующие настройки (частоту ставим максимальную, а от скорости будет зависеть, насколько быстро они перемещаются):

2022-10-06100825.jpg


4. Маршрут для шипов
Основные события для того, чтобы шипы выскакивали из-под пола и перемещались на соседнюю клетку, будут происходить в маршруте. Выглядит он примерно так:

2022-10-06101000.jpg


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

5. Скрипт для звука шипов
Это скрипт для того, чтобы громкость звука, с которым шипы выскакивают, уменьшалась, когда они удаляются от игрока. Он состоит из двух строчек. В первой вычисляется расстояние от шипов до игрока. Это значение записывается в переменную (в моём случае это переменная №8):
$gameVariables.setValue(8, Math.abs($gamePlayer.x - $gameMap.event(this._eventId).x) + Math.abs($gamePlayer.y - $gameMap.event(this._eventId).y));

Во второй строчке проигрывается звук (это звук из файла «Evasion2»). Я решил, что на расстоянии в 16 клеток от игрока звука не будет вообще. Громкость уменьшается на 5 за каждую клетку расстояния между игроком и шипами:
if ($gameVariables.value(8) <16) {AudioManager.playSe({name: 'Evasion2', volume: (80 - ($gameVariables.value(8) * 5)), pitch: 100})};

6. Возвращение шипов на исходную позицию
Когда шипы достигают конечной точки своего маршрута (в моём случае координаты 19 по горизонтали), они возвращаются в начальную позицию. А точнее, в клетку слева от начальной позиции, потому что сразу после этого они делают шаг вправо:
if ($gameMap.event(this._eventId).x === 19) {$gameMap.event(this._eventId).locate(3, 17)};

7. Нанесение урона
Как вы заметили, в самом событии шипов нет ничего, что бы наносило урон игроку. Они просто выскакивают. Вначале я планировал сделать урон при касании, однако это работало плохо, могло нанести урон, когда игрок пробегает через убранные шипы, или не нанести, когда он просто стоит на месте, а шипы проходят сквозь него. Поэтому я сделал нанесение урона отдельным событием:

2022-10-06111715.jpg


В чём его смысл? Когда шипы появляются из-под пола, в их маршруте включается триггер (в моём случае, это переключатель №31), после чего начинает работать событие нанесения урона (параллельно!). Оно проверяет, совпадает ли координата игрока с координатой шипов (у меня событие шипов называется «Ловушка») и, если совпадает, происходят световые и звуковые эффекты нанесения урона, и у игрока отнимается ХП.
После этого (важно!) я отключаю переключатель, чтобы это событие перестало работать, иначе ХП отнимется не один раз, а будет убывать всё время, пока игрок с шипами находятся на одной клетке (обнулится почти моментально).

8. Дополнительные фишки
Ничто не мешает разместить на карте несколько таких шипов, надо только сравнивать координаты каждого из событий шипов с координатой игрока в событии нанесения урона.
Не обязательно двигать эти шипы только по прямой, они могут иметь любую траекторию: но надо будет либо вписывать её всю в маршрут события, либо обозначать точки поворота, в которых событие будет переключаться на страницу с другим маршрутом.
Я вовсе отключаю эти шипы, когда игрок отходит от них достаточно далеко, просто чтобы они не тратили ресурсы на вычисления.
На видео движется сразу пара шипов. Чтобы не делать два события, я сделал из шипов чарсет в две клетки по вертикали, так что получилось одно событие с графикой из двух шипов одни над другими. В этом случае при нанесении урона, я проверяю не только координату события шипов, но и координату на 1 клетку выше его.
Последнее редактирование: 1 год 5 мес. назад от Alx_Yago.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, Empy, DarchanKaen, Jas6666, yuryol, akito66, katenok0603, LiRo, Adamant, SmallHamster и еще 2 пользователей
Время создания страницы: 0.230 секунд