Блог ☯

среда, 22 марта 2017 г.

Основы создания игр: Как сделать спавны врагов в игре - Game Maker

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

Спавн (spawn) - переводится как порождать, рожать, метать икру, плодиться, вызывать и т.д. В Английском одно слово может быть как глаголом, так и существительным. В этом случае это тоже так. Глагол будет означать действие, буквально - откладывать яйца. Грубо говоря спавн это место (или объект), который плодит других существ.
Иногда это слово применяют немного странно, например называя спавнами здания в Clash Royale, которые плодят монстриков. 
Спавны есть во многих играх, но чаще они есть в стратегиях и в производных от стратегий (MOBA). В простых играх враги иногда появляются просто где-то на углах карты (спавнятся) и эту механику для гейм мейкер (game maker) я тоже опишу.

Начнём к классического понимания спавна, вот так я его делал в своей игре (её не выкладывал и не доделал Lands 2):

Основы создания игр: Как сделать спавны врагов в игре - Game Maker

Красный круг сверху - спавн врагов

В данном случае тут у нас миссия, где синий герой с союзниками (зелёными) должен победить врагов (красных) и захватить все их спавны. Эту механику я делал в игре Lands, а тут лишь вторая часть.
Первую часть Lands вы можете глянуть вот тут (короткое видео трейлер)
Как этот самый спавн плодит врагов? На самом деле это элементарно, но у нас тут пока основы создания игр, поэтому покрываем и элементарные вещи.

Код при создании объекта:

Основы создания игр: Как сделать спавны врагов в игре - Game Maker


Код вот такой:
alarm[0]=450+random(450)
Тут я внёс элемент рандома. Мы просто запускаем "будильник-таймер (alarm)" на 450-900 тиков (при скорости комнаты, FPS 30. спавн будет каждые 15-30 секунд).

Более подробно про то, как работает скорость комнаты и FPS, читайте в прошлом уроке:


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

Основы создания игр: Как сделать спавны врагов в игре - Game Maker

Опять-же, всё просто.

Мы еще раз запускаем этот-же таймер, замыкая цикл. То есть он будет запускаться снова и снова, плодя монстриков каждые 15-30 секунд, а потом еще и еще.

Кроме того мы должны еще плодить монстриков, да? Кстати можем кроме этого делать и то-то еще, например так-же может стрелять башня, каждые 15-30 секунд создавая снаряд.

Создание объекта я надеюсь вы все знаете:
instance_create(x,y,o_red)
Вот в общем-то и всё. o_red - не самое лучшее название для объекта, но игра эта уже старая, там я писал как попало. Но вообще главное в названиях объектов - чтобы вам самим был легко ориентироваться в коде. Но конечно-же писать нужно только на латинице.

Далее мы эти объекты - спавны, раскидываем по карте, как хотим. Тут уже вопрос дизайна уровней (левел дизайна)

Можно вообще сделать случайную генерацию карты, как я делал в первой части Lands:

Основы создания игр: Как сделать спавны врагов в игре - Game Maker

Тут немного страшновато, но игра старая... Спавны тут - флаги

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

Основы создания игр: Как сделать спавны врагов в игре - Game Maker

Справка из игры пятилетней давности. Агрессоры с Сириуса, уже тогда...

Ладно. вернёмся к спавнам. Иногда нужно сделать появление врагов просто например сверху комнаты (карты). Как это делается?

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

Основы создания игр: Как сделать спавны врагов в игре - Game Maker

Спавн врагов - сверху

Нам нужно знать размер комнаты (разрешение игры). Тут оно 600 на 800 пикселей, портретная ориентация, под телефон.

Теперь, на каких координатах нам нужно появление врагов?

0-600 (по горизонтали, X), ну и опционально 0-25 (по вертикали, по Y)

0-600 по Х пишется как random(600) - случайное число от 0 до 600

Кстати при таком рандоме у вас будут выпадать еще и не целые числа (0.23, 14.88 и т.д.)

Чтобы выпадали только ровные целые числа, нужно округлить, например через round

round(random(600)) - хотя есть и другие способы округления

Врагом у меня обычно спавнит специальный объект - o_god (бог), он вообще управляет всеми такими глобальными вещами, мне лично так удобнее. Иногда для прикола его я называю obj_devil.

Есть два простых способа спавнить врагов, либо это делается через тики (alarm), либо через шаги (step). Через шаги делать это немного извращенский способ, но он тоже работает.

Через тики, первая часть у нас такая-же как и в случае со спавнами из моего первого примера:
alarm[0]=450+random(450)
Просто то, что я выделил красным мы меняем на наш промежуток времени. Если надо создавать врага каждую секунду, при скорости комнаты 30, то пишем там:
alarm[0]=30
Врага создаём аналогично:
instance_create(random(600),0,obj_enemy_ship_1)
Единственное что меняем, это координаты создания объекта. Не в точке объекта спавна, а уже сверху карты, 0-600, 0. Это создат врага в случайной точке сверху.

Иногда для таких игр вам нужно создавать врагов пачками, например в линию.

Ну и пишите тогда примерно вот так:
instance_create(200,0,obj_enemy_ship_1)
instance_create(300,0,obj_enemy_ship_1)
instance_create(400,0,obj_enemy_ship_1)
Тогда появиться 3 врага в чётких местах по Х (200, 300, 400). Можно кстати мешать врагов, создавать например три первых врага вот так, а еще позади - второго, более сильного врага.

Короче простора для фантазии много.

Если у вас там например какой-то типа серьезный корабль, который плодит мелких (бывает и такое), то по сути дела этот корабль и будет у вас спавном, он и будет создавать врагов так-же.

Кстати эта моя игра - одна из первых где я учился рисовать pixel art:


Основы создания игр: Как сделать спавны врагов в игре - Game Maker

Как я рисую этот корабль даже есть видео

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

Понравилась статья? Не забывайте поставить палец вверх. Всем удачи!

Так-же я сделал видео на эту тему, тоже можете посмотреть (10 минут):