Game maker. Урок 2. Действия и создание простой игры.

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

Если нажать правой кнопкой по средней колонке в свойствах объекта и выбрать Add event (добавить событие) то выскочит следующее окошко:
Фото
Create (создание) - событие создания объекта. Оно срабатывает, когда объект появляется в комнате.
Destroy (уничтожение) - событие уничтожения объекта. Оно срабатывает, когда мы уничтожаем объект действием.
Alarm (Будильник, жарг. Аларм) - событие будильника. Будет рассмотрено позже.
Step (Шаг) - событие, происходящее каждый шаг в игре. Количество шагов в секунду устанавливается в настройках комнаты
Collision (Столкновение) – событие, происходящее когда пересекаются спрайты (а точнее маски) двух экземпляров
Keyboard (клавиатура) - событие, происходящее все время, пока нажата определенная клавиша. Оно происходит сразу для всех экземпляров, так что очень редко одинаковые события клавиатуры ставятся разным объектам. Также существуют события keyboard pressed (нажата) и released (отпущена). Их удобно использовать, если событие должно произойти один раз (например выстрел)
Mouse (мышь) – событие происходящее при нажатии/отпускании/наведении мыши на экземпляр. Также существую глобальные события мыши, которые происходят когда мышь не наведена на объект.
Other events (другие события):
Outside room (Вне комнаты) - Событие происходит, когда экземпляр находится за границами комнаты.
Intersect boundary (Пересечение границы) - Событие происходит во время того, как экземпляр пересекает границу комнаты.
Game start (Начало игры) - событие, происходящее при запуске игры. В мини-играх редко используется.
Game end (Конец игры) - Событие происходит, когда игра заканчивается.
Room start (Начало комнаты) - Это событие происходит для всех экземпляров при старте комнаты.
Room end (Конец комнаты): Это событие происходит для всех экземпляров при окончании комнаты.
Animation end (Конец анимации) - анимация содержит кадры, и они показываются друг за другом. После того, как был показан последний кадр показывается самый первый. В этот момент и происходит это событие.
End of path (Конец пути): Событие происходит, когда экземпляр доходит до конца пути (path). Подробнее о них, Вы прочтете в следующих уроках.
User defined (Пользовательские события): Может быть 16 таких событий. Они не произойдут, пока Вы сами не вызовите их с помощью специальной функции.
Ну а теперь порядок выполнения событий :
-Begin step events (События начала шага)
-Alarm events (События таймера)
-Keyboard (События клавиатуры)
-Mouse events (События Мыши)
-Normal step events (События Шага)
-(установка всех экземпляров в свои новые позиции)
-Collision events (События столкновения)
-End step events (События конца шага)
-Drawing events (События Рисования)
Теперь мы можем поставить события объекту, но зачем? Чтобы выполнялись действия.
Сейчас рассмотрим основные действия движения :
Move Fixed (Фиксированное движение)
Действие используется чтобы задать объекту определенное направление и скорость. Направление движения можно указать, нажав соответствующие кнопки. Средняя кнопка означает остановку объекта. Скорость движения указывается в соответствующей строке. Если выбрать несколько направлений, то направление движения объекта будет выбрано случайным образом из отмеченных. С помощью этого, например монстр, может начать двигаться как влево, так и вправо.
Speed Horizontal (Горизонтальная скорость)
С помощью этого действия, Вы сможете изменять горизонтальную скорость экземпляра. Изменения можно сделать относительными (если отметить галочку Relative) или абсолютную (по умолчанию). Положительное значение двигает экземпляр вправо, отрицательное – влево.
Speed Vertical (Вертикальная скорость)
Аналогично, с помощью этого действия изменяется вертикальная скорость экземпляра. Положительная скорость двигает экземпляр вниз, отрицательная - вверх
Reverse Horizontal (Развернуть горизонтально)
Это действие изменяет горизонтальную скорость на противоположную .Вы можете применить это, например, когда объект должен отскочить от стены.
Reverse Vertical (Развернуть вертикально)
Аналогично, с помощью этого действия вертикальная скорость изменяется на противоположную.
Jump to Position (Переместить в позицию)
Это действие перемещает экземпляр в указанную позицию. Если отметить флажок relative то позиция будет выбрана в зависимости от текущих координат экземпляра
Jump to Start (Переместить в начальную позицию)
Это действие переместит экземпляр в ту позицию, где он был создан.
Jump to Random (Переместить случайно)
Действие перемещает экземпляр в случайную точку в пределах комнаты, при чем позиция выбирается свободная от твердых объектов.
Bounce (Рикошет)
Если поместить это действие в событие столкновения с твердым объектом, то он отскочит как в реальной жизни, без учета гравитации по закону "угол падения равен углу отражения". Во многих случаях это выглядит вполне правдоподобно.
С остальными мы познакомимся в ходе создания мини-игр.
Итак, начнем!
Первое что необходимо сделать – это зайти в Game maker (куда же мы без капитана?). Теперь загрузим спрайты : нажмем на изображение пэкмэна пять раз. Перед нами выскочит пять окошек со свойствами спрайтов. Загрузим из папки sprites/tutorial1 файлы bomb, apple, wall, strawberry, banana и назовем их s_bomb, s_apple, s_wall, s_strawbery и s_banana соответственно.
/*А теперь немного грамматики. Названия спрайтов, звуков, объектов и прочих должны состоять
только из латинских букв и символов. Также обязательно название строится по принипу
ресурс_название_примечание, пример : s_hero_jump. Сразу же понятно, что это спрайт прыжка героя. */

Теперь создадим три звука и загрузим их из папки sound/tutorial1.Назовем их snd_click, snd_music, snd_boom . Аналогично поступим с фоном.
Приступим к созданию объектов. Первый объект – стена. Назовем его o_wall и присвоим ему спрайт s_wall. Теперь установим его твердость (галочка Solid). В событии Create добавим действие play sound snd_music
Новый объект – o_apple. Присвоим ему соответствующий спрайт и добавим событие «Create». В нем выберем действие «Move Fixed», установим все направления, кроме центрального и поставим скорость 8. В событии столкновения с объектом стены поставим «Bounce», а в событии левой кнопки мыши установим Jump to random position, play sound snd_click и set_score с аргументом 50 и флажком «Relative».

В итоге у вас должен получиться примерно такой набор действий :
Фото
Теперь создадим объект o_strawbery, присвоим спрайт s_strawbery и выполним в событиях все то же самое, только скорость движения будет 5, а количество очков 30.
Создадим объект o_banana, присвоим ему спрайт и сделаем копию объекта o_apple.

Изменим только Move Fixed таким образом:
Фото
И количество очков 200.
Теперь создадим объект o_bomb и присвоим ему спрайт. В событии «создание» добавим будильник (из меню main2), количество шагов установим на 60. Также добавим действие Jump to random. В событии alarm0 добавим create instance и укажем объект бомбы. Координаты изменять не будем, бомба при создании автоматически перепрыгнет в случайную позицию. И, наконец, событие левой кнопки мыши. Действие play sound s_boom, show highscore и game restart.

Теперь осталось создать комнату и расставить в ней объекты, я это сделал так :
Фото
Ну и установим фон в комнату.
Теперь кликнем F5 и наслаждаемся созданным «шедевром»