Найти тему

Asteroids на Game Maker Studio за пол часа

Оглавление

Доброго времени суток, дорогие читатели! В одной из статей я рассказывал вам как создать игру жанра арканоид за пол часа. Можете ознакомиться с ней тут:

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

Небольшое видео из нашей игры, которую мы создадим в этой статье
Небольшое видео из нашей игры, которую мы создадим в этой статье

Готовим ресурсы

Находим и качаем бесплатный пак графики для нашей игры. Я решил взять спрайты по этой ссылке:

Star Fighter by ansimuz
Пак графики для нашей будущей игры
Пак графики для нашей будущей игры

Далее в самом движке создаем и загружаем спрайты из данного пакета графики. Прошу обращать внимание на имя спрайта, на то, куда установлен якорь спрайта (чаще всего по центру) и какая маска спрайта для определения столкновений.

Спрайт корабля. Имя spr_ship_hero, якорь в Middle Centre, маска Precise Per Frame (Slow)
Спрайт корабля. Имя spr_ship_hero, якорь в Middle Centre, маска Precise Per Frame (Slow)
Спрайт астероидов. Имя spr_asteroids, якорь в Middle Centre, маска Precise Per Frame (Slow)
Спрайт астероидов. Имя spr_asteroids, якорь в Middle Centre, маска Precise Per Frame (Slow)
Спрайт снаряда. Имя spr_bullet, якорь в Middle Centre, маска Rectangle with rotation
Спрайт снаряда. Имя spr_bullet, якорь в Middle Centre, маска Rectangle with rotation
Спрайт взрыва. Имя spr_explosion, якорь в Middle Centre, маска Full Image
Спрайт взрыва. Имя spr_explosion, якорь в Middle Centre, маска Full Image
Спрайт бэкграунда. Имя spr_asteroids_background, якорь в Top Left, маска не важна
Спрайт бэкграунда. Имя spr_asteroids_background, якорь в Top Left, маска не важна

Так же загружаем три звука (точнее два звука и одну мелодию) для игры и называем их так, как указано на скриншоте ниже:

Звуки для игры в дереве ресурсов
Звуки для игры в дереве ресурсов

Имена файлов в скаченном паке, которые мы будем использовать:

Explosion.wav - звук взрыва (находится в папке Audio) - в GMS мы его называем snd_explosion

Laser_Shoot.wav - звук выстрела (находится в папке Audio) - в GMS мы его называем snd_fire

spaceship shooter.ogg - музыка (находится в папке Music)- в GMS мы ее называем snd_music

Так же создадим какой-нибудь шрифт для игры, чтобы можно было выводить очки на экран:

Создаем шрифт. Выбираем какой вам понравится из списка. Называем его "Font1". Проверяем, чтобы в нем обязательно были символы цифр (обычно они всегда есть по умолчанию)
Создаем шрифт. Выбираем какой вам понравится из списка. Называем его "Font1". Проверяем, чтобы в нем обязательно были символы цифр (обычно они всегда есть по умолчанию)

Создаем объекты

Спрайты готовы. Переходим к созданию объектов и программированию их логики. Возле каждой строчки кода оставил комментарии (зеленым цветом).

1) Объект корабля

Создаем 4 события в объекте корабля: событие создания, шага, столкновения с объектом астероида и событие выхода за границы экрана
Создаем 4 события в объекте корабля: событие создания, шага, столкновения с объектом астероида и событие выхода за границы экрана

Ниже код каждого из событий с подробным описанием каждой строчки кода:

Код события создания объекта корабля (Create)
Код события создания объекта корабля (Create)
Код шага корабля (Step)
Код шага корабля (Step)
Код события столкновения (Collision) корабля с объектом астероида
Код события столкновения (Collision) корабля с объектом астероида
Код события выхода корабля за границы экрана (Intersect Boundary)
Код события выхода корабля за границы экрана (Intersect Boundary)

2) Объект астероида

Создаем 3 события в объекте астероида: событие создания, шага и событие выхода за границы экрана
Создаем 3 события в объекте астероида: событие создания, шага и событие выхода за границы экрана

Ниже код каждого из событий с подробным описанием каждой строчки кода:

Код события создания объекта астероида (Create)
Код события создания объекта астероида (Create)
Код шага астероида (Step)
Код шага астероида (Step)
Код события выхода астероида за границы экрана (Intersect Boundary)
Код события выхода астероида за границы экрана (Intersect Boundary)

3) Объект выстрела/снаряда

Создаем 2 события в объекте пули: событие столкновения с объектом астероида и событие выхода за границы комнаты
Создаем 2 события в объекте пули: событие столкновения с объектом астероида и событие выхода за границы комнаты

Ниже код каждого из событий с подробным описанием каждой строчки кода:

Код события столкновения (Collision) пули с объектом астероида
Код события столкновения (Collision) пули с объектом астероида
Код события выхода пули за границы комнаты
Код события выхода пули за границы комнаты

4) Объект взрыва

Создаем 2 события в объекте взрыва: событие создания и шага
Создаем 2 события в объекте взрыва: событие создания и шага

Ниже код каждого из событий с подробным описанием каждой строчки кода:

Код события создания объекта взрыва (Create)
Код события создания объекта взрыва (Create)
Код шага взрыва (Step)
Код шага взрыва (Step)

5) Объект контроллер

Создаем 4 события в объекте контроллере: событие создания, шага, рисования слоя GUI (графический интерфейс пользователя) и событие нажатия кнопки "R"
Создаем 4 события в объекте контроллере: событие создания, шага, рисования слоя GUI (графический интерфейс пользователя) и событие нажатия кнопки "R"

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

Ниже код каждого из событий с подробным описанием каждой строчки кода:

Код события создания объекта контроллера (Create)
Код события создания объекта контроллера (Create)
Код события шага объекта контроллера (Step)
Код события шага объекта контроллера (Step)
Код события рисования GUI слоя объекта контроллера (Draw GUI)
Код события рисования GUI слоя объекта контроллера (Draw GUI)
Код события нажатия клавиши "R" объекта контроллера
Код события нажатия клавиши "R" объекта контроллера

Создаем комнаты

Создаем две комнаты. В одной (пустой) у нас просто будут задаваться все необходимые начальные параметры и сразу переход в следующую комнату. Во второй комнате у нас уже будет непосредственно сам уровень.

1) Первая комната

Назовем ее "Begin_Room_Asteroids". Зададим ей размеры 840 на 480 и пропишем небольшой код в событии создания комнаты "Creation Code" (сам код на скриншоте ниже).
Назовем ее "Begin_Room_Asteroids". Зададим ей размеры 840 на 480 и пропишем небольшой код в событии создания комнаты "Creation Code" (сам код на скриншоте ниже).
Код события создания первой комнаты
Код события создания первой комнаты

2) Вторая комната

Устанавливаем размер комнаты 840 на 480. Называем ее "Aster_room1". Создаем несколько слоев для объектов: для самого корабля, для астероидов и для пуль. На слой корабля перетягиваем в центр объект кораблика, а на слой астероидов перетягиваем несколько астероидов (при необходимости можно сменить им спрайты). А так же остается слой для бэкграунда (на который вставляем наш спрайт фона и растягиваем его). В событии создания комнаты Creation Code прописываем небольшой код (код на скриншоте ниже).
Устанавливаем размер комнаты 840 на 480. Называем ее "Aster_room1". Создаем несколько слоев для объектов: для самого корабля, для астероидов и для пуль. На слой корабля перетягиваем в центр объект кораблика, а на слой астероидов перетягиваем несколько астероидов (при необходимости можно сменить им спрайты). А так же остается слой для бэкграунда (на который вставляем наш спрайт фона и растягиваем его). В событии создания комнаты Creation Code прописываем небольшой код (код на скриншоте ниже).
Код события создания второй комнаты
Код события создания второй комнаты

Далее проверяем, чтобы в дереве ресурсов наша первая комната шла именно первой в очереди (рядом с ней должен быть нарисован домик). Если она будет стоять ниже, то просто перетащите ее вверх:

Порядок комнат в дереве ресурсов
Порядок комнат в дереве ресурсов

Запускаем!

Игра готова! Можете запустить и потестировать.

Не забывайте, что повороты корабля влево-вправо назначены на кнопки "A" и "D", а подача газа на "W", выстрел мы назначили на кнопку "Пробел".

У нас всего 5 жизней. После этого игра начнется заново. Если же мы уничтожим все астероиды на экране, то комната перезагрузится и они появятся снова, но очки при этом не сбросятся, т.е. можно будет продолжать набирать их, пока игрок не потратит все жизни.

Скриншот из созданной нами игры "Asteroids"
Скриншот из созданной нами игры "Asteroids"

Спасибо, что дочитали статью до конца! Ставьте лайки, делитесь ей с другими, задавайте вопросы, оставляйте комментарии, пожелания и т.д. Если есть непонятные строчки в коде, то можете смело задавать вопросы по ним в комментариях. Я постараюсь подробнее объяснить, что делает та или иная функция в коде. К сожалению, в рамках одной статьи это нельзя рассказать подробно. Статья преследует другие цели - показать в общем логику создания одной простой игры, не вдаваясь в подробности.