Продолжаю обучение созданию игр гейм мейкер и серию уроков по созданию игр. В этой статье я хочу поговорить о такой штуке как спавны врагов - места из которых появляются новые враги. Кстати, не обязательно это должны быть враги, могут быть и союзники. Конечно, пока я покрываю только основы создания игр, но мы будет двигаться дальше.
Спавн (spawn) - переводится как порождать, рожать, метать икру, плодиться, вызывать и т.д. В Английском одно слово может быть как глаголом, так и существительным. В этом случае это тоже так. Глагол будет означать действие, буквально - откладывать яйца. Грубо говоря спавн это место (или объект), который плодит других существ.
Начнём к классического понимания спавна, вот так я его делал в своей игре (её не выкладывал и не доделал Lands 2):
В данном случае тут у нас миссия, где синий герой с союзниками (зелёными) должен победить врагов (красных) и захватить все их спавны. Эту механику я делал в игре Lands, а тут лишь вторая часть.
Код при создании объекта:
Код вот такой:
Более подробно про то, как работает скорость комнаты и FPS, читайте в прошлом уроке:
Тут мы запустили таймер при создании спавна (флаг тут называется). Теперь нам нужно что-то делать когда время подойдёт.
Опять-же, всё просто.
Мы еще раз запускаем этот-же таймер, замыкая цикл. То есть он будет запускаться снова и снова, плодя монстриков каждые 15-30 секунд, а потом еще и еще.
Кроме того мы должны еще плодить монстриков, да? Кстати можем кроме этого делать и то-то еще, например так-же может стрелять башня, каждые 15-30 секунд создавая снаряд.
Создание объекта я надеюсь вы все знаете:
Далее мы эти объекты - спавны, раскидываем по карте, как хотим. Тут уже вопрос дизайна уровней (левел дизайна)
Можно вообще сделать случайную генерацию карты, как я делал в первой части Lands:
Вот тут кстати вы можете видеть концепцию игры, со случайными картами всегда идёт месиво красные против зелёных, а вы, синий, помогаете зелёным. Вообще тут я даже легенду придумывал... Хорошая была игра, душевная.
Ладно. вернёмся к спавнам. Иногда нужно сделать появление врагов просто например сверху комнаты (карты). Как это делается?
Тут уже возьмём пример из моей игры Space Story, к которой я кстати сейчас пилю обновление. Там враги появляются сверху карты, очень стандартная схема для подобных аркад. Вам это точно пригодиться.
Нам нужно знать размер комнаты (разрешение игры). Тут оно 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). Через шаги делать это немного извращенский способ, но он тоже работает.
Через тики, первая часть у нас такая-же как и в случае со спавнами из моего первого примера:
Иногда для таких игр вам нужно создавать врагов пачками, например в линию.
Ну и пишите тогда примерно вот так:
Тогда появиться 3 врага в чётких местах по Х (200, 300, 400).
Можно кстати мешать врагов, создавать например три первых врага вот так, а еще позади - второго, более сильного врага.
Короче простора для фантазии много.
Если у вас там например какой-то типа серьезный корабль, который плодит мелких (бывает и такое), то по сути дела этот корабль и будет у вас спавном, он и будет создавать врагов так-же.
Кстати эта моя игра - одна из первых где я учился рисовать pixel art:
Вот в общем-то и всё. Делать спавны врагов в игре довольно просто, гейм мейкер (game maker) позволяет это делать очень легко. Ну а я завершаю этот урок основ создания игр, ну и ближайшее время ждите следующего, будет постепенно всё усложнять и переходить к более интересным темам.
Понравилась статья? Не забывайте поставить палец вверх. Всем удачи!
Так-же я сделал видео на эту тему, тоже можете посмотреть (10 минут):
Спавн (spawn) - переводится как порождать, рожать, метать икру, плодиться, вызывать и т.д. В Английском одно слово может быть как глаголом, так и существительным. В этом случае это тоже так. Глагол будет означать действие, буквально - откладывать яйца. Грубо говоря спавн это место (или объект), который плодит других существ.
Иногда это слово применяют немного странно, например называя спавнами здания в Clash Royale, которые плодят монстриков.Спавны есть во многих играх, но чаще они есть в стратегиях и в производных от стратегий (MOBA). В простых играх враги иногда появляются просто где-то на углах карты (спавнятся) и эту механику для гейм мейкер (game maker) я тоже опишу.
Начнём к классического понимания спавна, вот так я его делал в своей игре (её не выкладывал и не доделал Lands 2):
Красный круг сверху - спавн врагов
В данном случае тут у нас миссия, где синий герой с союзниками (зелёными) должен победить врагов (красных) и захватить все их спавны. Эту механику я делал в игре Lands, а тут лишь вторая часть.
Первую часть Lands вы можете глянуть вот тут (короткое видео трейлер)Как этот самый спавн плодит врагов? На самом деле это элементарно, но у нас тут пока основы создания игр, поэтому покрываем и элементарные вещи.
Код при создании объекта:
Код вот такой:
alarm[0]=450+random(450)Тут я внёс элемент рандома. Мы просто запускаем "будильник-таймер (alarm)" на 450-900 тиков (при скорости комнаты, FPS 30. спавн будет каждые 15-30 секунд).
Более подробно про то, как работает скорость комнаты и FPS, читайте в прошлом уроке:
Тут мы запустили таймер при создании спавна (флаг тут называется). Теперь нам нужно что-то делать когда время подойдёт.
Опять-же, всё просто.
Мы еще раз запускаем этот-же таймер, замыкая цикл. То есть он будет запускаться снова и снова, плодя монстриков каждые 15-30 секунд, а потом еще и еще.
Кроме того мы должны еще плодить монстриков, да? Кстати можем кроме этого делать и то-то еще, например так-же может стрелять башня, каждые 15-30 секунд создавая снаряд.
Создание объекта я надеюсь вы все знаете:
instance_create(x,y,o_red)Вот в общем-то и всё. o_red - не самое лучшее название для объекта, но игра эта уже старая, там я писал как попало. Но вообще главное в названиях объектов - чтобы вам самим был легко ориентироваться в коде. Но конечно-же писать нужно только на латинице.
Далее мы эти объекты - спавны, раскидываем по карте, как хотим. Тут уже вопрос дизайна уровней (левел дизайна)
Можно вообще сделать случайную генерацию карты, как я делал в первой части Lands:
Тут немного страшновато, но игра старая... Спавны тут - флаги
Вот тут кстати вы можете видеть концепцию игры, со случайными картами всегда идёт месиво красные против зелёных, а вы, синий, помогаете зелёным. Вообще тут я даже легенду придумывал... Хорошая была игра, душевная.
Справка из игры пятилетней давности. Агрессоры с Сириуса, уже тогда...
Ладно. вернёмся к спавнам. Иногда нужно сделать появление врагов просто например сверху комнаты (карты). Как это делается?
Тут уже возьмём пример из моей игры Space Story, к которой я кстати сейчас пилю обновление. Там враги появляются сверху карты, очень стандартная схема для подобных аркад. Вам это точно пригодиться.
Спавн врагов - сверху
Нам нужно знать размер комнаты (разрешение игры). Тут оно 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) позволяет это делать очень легко. Ну а я завершаю этот урок основ создания игр, ну и ближайшее время ждите следующего, будет постепенно всё усложнять и переходить к более интересным темам.
Понравилась статья? Не забывайте поставить палец вверх. Всем удачи!
Так-же я сделал видео на эту тему, тоже можете посмотреть (10 минут):