16+
ComputerPrice
НА ГЛАВНУЮ СТАТЬИ НОВОСТИ О НАС




Яндекс цитирования


Версия для печати

Модуль поиска не установлен.

Game Maker. Создаем игру без программирования

05.05.2004

Сергей Балабанов

Интерес к компьютерным играм в последнее время растёт в геометрической прогрессии. В них играют не только и не столько дети и подростки, сколько уже взрослые люди. Это связано, прежде всего, с тем, что современная компьютерная игра - это не просто игра в нормальном понимании этого слова - чаще всего это целый виртуальный мир, "жить" в котором подчас гораздо интересней, чем в мире настоящем.

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

Что же получается - если у вас нет миллионов и команды опытных игроделов, путь к созданию гениальной игры закрыт для вас навсегда? Вовсе нет. Сегодняшние компьютерные технологии позволяют реализовать ваш талант, не имея ничего из этого. Более того - вы можете не быть профессиональным программистом, художником, дизайнером, композитором, и создать вполне хорошую и качественную игру. Всё, что вам понадобится, - это желание творить, немного терпения и программа Game Maker.

Найти и скачать её можно на официальном сайте www.gamemaker.nl. Последняя на сегодняшний день версия данной программы - 5.2.

Game Maker была придумана и разработана голландским программистом Марком Овермарсом. Эта программа задумывалась как конструктор игр, работать с которым можно совсем без знаний программирования (хотя, несмотря на это, в Game Maker встроен собственный несложный язык программирования, однако его абсолютно не обязательно применять). Пользоваться Game Maker необычайно легко. Весь процесс разработки игры сводится к созданию так называемых объектов (objects) (это все то, из чего состоит игра - оружие, персонажи, деревья и т.д.) и отношений между ними. Допустим, объект "пуля" при попадании в объект "человек" уничтожает его. Или, например, объект "танк" при столкновении с объектом "стена" прекращает своё движение. Именно такие условия определяют взаимодействие объектов друг с другом.

Совершенно ясно, что каждый из них должен иметь своё, отличное от других, графическое изображение. Объект "человек" должен иметь картинку, похожую на человека, а "танк" - на изображение танка. За визуальное отображение объекта в Game Maker отвечают спрайты (sprites). Спрайт - это картинка, либо набор картинок, которые используются объектом для собственного отображения на экране.

Кроме того, объекты должны перемещаться, взаимодействовать друг с другом в каком-либо закрытом пространстве. Эти пространства в Game Maker получили название комнат (rooms).

С общей теорией, похоже, всё, теперь самое время перейти к ознакомлению с интерфейсом программы:

Как видите, он весьма прост. На верхней графической панели расположены несколько групп рабочих инструментов. Первая из них состоит из трёх кнопок, которые создают, открывают и сохраняют файлы, в которых хранится ваша игра (формат *.gmd). Вторая группа позволяет запускать игру. Третья является основной - здесь расположены кнопки, с помощью которых в игровой проект добавляются основные "строительные кирпичики": спрайты, звуки, комнаты и фоны для них, объекты и т.д. Все они сортируются в раскрывающихся папках слева.

Теперь попробуем создать небольшую игру, на разработку которой у меня ушло около одного часа. Вот как она выглядит:

Это простенькая аркада, в которой, управляя самолётом, нужно уничтожить как можно больше вражеской авиации, избегая столкновения с ней. Все спрайты, использованные в этой игре, я взял из стандартного набора Game Maker - gmaker/sprites (картинки, которые я использовал, поставляются не со всеми версиями Game Maker, так что если в вашем наборе их не окажется, можно легко заменить их любыми другими).

Начнём с добавления нужных нам спрайтов. Нажмите на кнопку Add Sprite, расположенную на панели инструментов, а в открывшемся далее окне Sprite Properties на Load Sprite. Теперь найдите в папке Sprites/Transport файлы "AV8A.bmp" и "B1.bmp", добавьте их в игру. Так как самолеты в игре будут двигаться в четырёх направлениях, каждый спрайт должен содержать ровно столько же изображений: для самолёта, летящего вперёд, назад, влево и вправо. Для этого нужно активировать Sprite Editor кнопкой Edit Sprite. Затем в меню Animation необходимо выбрать пункт Set Length и указать число кадров, равное четырём. Теперь нужно развернуть каждую из созданных картинок, нажав на неё, и в открывшемся окне Image Editor активировать команду Transform/Rotate. Первый кадр следует развернуть на 90 градусов, второй - оставить как есть, третий - на 270, последний - на 180.

Итак, вы создали спрайт самолёта, которым будете управлять в игре, теперь необходимо проделать то же самое для спрайта вражеских самолётов на основе рисунка "B1.bmp". Также нам понадобится создать спрайт пули (рисунок Sprites/breakout/ball2.gif), спрайт взрыва (рисунок Sprites/Various/explode2.gif), табло для очков (любой рисунок).

Кнопкой Add a Backgroung добавьте в проект фон (Backgrounds/sky.gif).

Всё. Подготовительная часть закончена. Теперь приступим к созданию объектов.

Нажмите на кнопку Add an Object, расположенную на панели инструментов. В открывшемся окне настроек созданного объекта в списке Sprite выберите спрайт вашего самолёта. Точно так же создайте объект со спрайтом вражеского самолёта и объекты со всеми оставшимися спрайтами. Всего должно получиться пять объектов: ваш самолёт, самолёт врага, пуля, взрыв и табло для очков.

Создайте новую комнату (Add a Room) и разместите в ней объект, отвечающий за ваш самолет. Выберите фон комнаты, используя список Background image used в закладке Background.

Нашей первостепенной задачей является создание пользовательского управления самолетом. Для того чтобы реализовать его, нужно открыть окно Object Properties нашего самолета и с помощью кнопки Add Event выбрать события Key Press/<Left>, Key Press/<Up>, Key Press/<Right>, Key Press/<Down>. Тем самым мы добавили в игру события, выполняющиеся при нажатии на клавиатуре кнопок "влево", "вверх", "вправо" и "вниз". Теперь нужно создать сами действия, осуществляющиеся при этих событиях. Совершенно логично, что при нажатии на клавиатуре кнопки "влево" самолет должен двигаться влево, и т.д., поэтому в окно Action, расположенное напротив списка событий, нужно добавить действие Start moving a direction, после чего следует отредактировать его направление для каждого события и указать скорость движения, равную семи.

Запустите игру. Как видите - управление самолётом работает, однако его спрайт отображается некорректно. Теперь необходимо сделать так, чтобы при движении в какую-либо сторону на объект накладывался соответствующий кадр спрайта. Для этого нужно создать новое событие под названием Step и приписать к нему действие Set the value of a variable (Установка значения переменной), т.к. нам необходимо сделать так, чтобы каждый раз при изменении движения самолета изменялась переменная, отвечающая за номер фрагмента спрайта. В Game Maker она носит название "image_single". Следует отредактировать свойства действия Set the value of a variable, указав в графе variable переменную "image_single", а в графе её значения Value - "direction * image_number/360":

То есть, номер фрагмента = направлению движения самолета * номер картинки/360 градусов.

Запустите игру снова. Самолёт летит во все стороны, а фрагмент спрайта меняется в соответствии с направлением его движения.

Самое время приступить к созданию вражеской авиации. В поле событий объекта вашего самолёта добавьте таймер (Alarm 0). Как вы уже, наверное, догадались, это событие осуществляется при завершении какого-либо промежутка времени. Создайте действие Create an instance of an object (Создание образца объекта). В настройке этого действия в списке object выберите объект вражеского самолета. В поле x: напишите "random(800)", а в поле y: - "random(600)". Поясню, что все это значит. Мы создали действие, которое будут создавать вражеские самолёты каждый раз через равные промежутки времени в произвольной позиции на экране. Однако этого мало, т.к. ещё нужно указать длительность этого временного промежутка.

Создайте событие Create. Оно будет выполняться один раз, в самом начале игры. В поле Actions добавьте действие Set an alarm clock. Оно устанавливает время таймера. Настройте это действие. В поле number of steps: укажите число 100, а в in alarm no выберите таймер Alarm 0. Точно такое же действие следует добавить и в событие Alarm0.

Запустив игру и подождав некоторое время, вы обнаружите, что вражеская авиация хоть и появляется на игровом экране, но при этом остается абсолютно неподвижной. Для того чтобы она двигалась постоянно, в произвольном направлении, необходимо создать событие Alarm0 для объекта вражеского самолета и добавить в него действие Start moving a direction, настроив его следующим образом:

Также, следуя примеру выше, нужно настроить время таймера, равное 40. Изменение фрагмента спрайта в зависимости от направления движения можно реализовать так же, как это было создано для объекта вашего самолета.

Самолеты двигаются, однако игры пока нет. Самое время приступить к созданию стрельбы. Добавьте в окно Events: объекта вашего самолета событие нажатия клавиши Ctrl - Press Key / <Ctrl>. В список Actions: поместите действие Create an instance of an object. Отредактируйте его, выбрав в списке object: объект пуля, в поля x: и y: внесите значения x+10 и y+10 соответственно. Теперь, запустив игру, вы можете убедиться, что при нажатии на клавишу Ctrl возле вашего самолета появляется пуля, однако она неподвижна - ваша задача заставить её двигаться. Для этого нужно открыть окно Object Properties объекта пули и добавить новое событие Create. Затем - в список Actions: поместить Set direction and speed of motion. Измените свойства этого действия, указав в графе direction: "объект вашего самолета.direction", а в графе speed: число 15.

Следующая наша задача - сделать так, чтобы при попадании пули во вражеский самолет он уничтожался. Открываем окно свойств объекта вражеского самолета. Добавляем новое событие столкновения с объектом пули - Collision. В список действий перемещаем действия: Destroy the instances (Оно уничтожит вражеский самолет), Create an instance of an object (Это действие будет создавать объект взрыва на месте уничтоженного самолета. В графе object: укажите объект взрыва, в x: - x, а в y: - y). Кажется, всё. Но нет - ещё одна маленькая деталь. Дело в том, что, закончив анимацию, объект взрыва не исчезает с экрана. Это неудобно и некрасиво. Его следует отредактировать, внеся в окно Events: событие Other / Animation and, а напротив, в список действий, знакомое нам уже действие Destroy the instances. Таким образом, по окончании анимации своего спрайта, объект взрыва исчезает.

Остался последний и самый главный штрих - создание системы подсчета очков и жизней. Реализовать её несложно. Для начала создайте событие Create для объекта табло. Напротив, в список Actions: добавьте два одинаковых действия - Set the value of a variable. Отредактируйте их свойства, указав в пунктах variable: новые переменные - global.life и global.score. В первом действии определите значение переменной global.life равное трем, а во втором - переменной global.score равное нулю. Мы создали две переменные, одна из которых отвечает за подсчет ваших жизней, другая - за количество набранных очков. Теперь нужно сделать так, чтобы при столкновении с вражеской авиацией ваш самолет терял одну жизнь, а при нулевом их количестве игра бы заканчивалась. Откройте окно Object Properties объекта вашего самолета и добавьте новое событие столкновения с вражеским самолетом (Collision / Объект врага). В список Actions: поместите действия: Destroy the instance, Create an instance of an object (укажите в окне свойств этого действия объект взрыва, появляющийся в точке x, y), Set the value of a variable (variable: global.life, value: global.life-1). Для проверки наличия жизней создайте следующие действия: If an expression is true (в пункте expression: свойств данного объекта введите условие global.life>0), Create an instance of an object (для объекта вашего самолета, создающегося в точке x: - random (800), y: - random (600). С жизнями разобрались. Теперь нужно создать систему начисления очков. Откройте окно свойств объекта вражеского самолета и добавьте в список действий события столкновения с пулей новое действие - Set the value of a variable. В пункте variable: пропишите переменную global.score, а в пункт value: значение global.score+ global.score+1. Таким образом, количество очков будет постоянно увеличиваться с каждым новым сбитым самолетом. Так, за первый вы получите всего 1 очко, за второй - 3, за третий - 7 и т.д.

Теперь нужно сделать так, чтобы количество жизней и набранных очков отображалось на экране. Откройте окно свойств объекта табло и добавьте в список events: новое событие Draw (Событие рисования). В окно напротив добавьте действие выбора шрифта для рисуемого текста - Set a font for drawing text. Отредактируйте это действие, выбрав любой из понравившихся вам шрифтов. Далее поместите действие Draw a text (Рисовать текст). Также отредактируйте его, указав в графе text: следующий текст: "Life: "+ string(global.life). В графе x: поместите x, соответственно в y: - x. Добавьте ещё одно действие Draw a text, указав в пункте text: - "Score: "+string(global.score), в графе x: - x+200, а в y: - y.

Кажется, всё. Создавайте свои собственные интересные игры. Удачи!



статьи
статьи
 / 
новости
новости
 / 
контакты
контакты