5 января 2014 в 17:35
Game Maker. Урок 3. Создание арканоида
В этом уроке мы с вами рассмотрим создание арканоида. Цель игры арканоид - разбить шариком все блоки на игровом поле. Самая фишка в том, что шарик отскакивает от стен, блоков и ракетки по законам физики(действие Bounce, если вы помните). Игрок управляет только ракеткой, от которой отскакивает шарик. Самый известный и навороченный на данный момент арканоид -гиперболоид.
Ссылка на скачивание необходимых спрайтов находится в конце урока.
Но сначала немного теории...
В этом уроке будет использован Game Maker Language(GML) - встроенный язык программирования Game Maker'a. Пугаться не стоит - это все намного проще, чем кажется. Достаточно знать английский язык на уровне 8 класса.
1. Переменные
Переменная - это особый вид данных. У каждой переменной есть имя и значение. Ограничения имени переменной :
а) Имя состоит только из цифр, букв латинского алфавита и знаков подчеркивания _
б) Максимальная длина - 64 символа
в) Первый знак в имени не может быть цифрой
г) Пробелы недопустимы
д) Нельзя использовать такие имена как :
and
begin
break
case
continue
default
div
do
else
end
exit
global
globalvar
if
local
mod
noone
not
or
other
repeat
return
self
switch
then
until
var
while
with
Эти правила работают и для игровых ресурсов.
Значения бывают двух типов : число(real) и строка(string)
Численное значение может быть размером до 30 цифр.
Строковое - может содержать в себе все символы, которые вы только сможете в него засунуть. Оно всегда заключается в кавычки.("" или '')
Итак есть имя и есть значение. Как же их соединить? Для этого придуман оператор присваивания - знак равно.
gold = 200 hp = 100 text = "Привет!"
К переменным можно присваивать целые математические выражения, состоящие из чисел, переменных и + - * / (и функций вычисления,но об этом позже)
Строки можно только объединять при помощи знака +
moneta = 10 mech = 20 shit = 50 sumka = 2 ves = (moneta+mech+shit)/sumka text1 = "Здравствуй, " nick = "Вася" text = text1+nick
2. Операторы - особые слова, позволяющие манипулировать переменными и кодом.
2.1 Вычислительные операторы.
У нас есть переменная gold, которая равна чему-то. Нам нужно от нее отнять 100. Как поступить?
Можно так :
gold = gold-100
Но с появлением вычислительных операторов все упростилось. Достаточно прописать :
gold -= 100
Аналогично поступают со знаками + * /
2.2 Оператор if-else.
Дословно переводится как Если-Иначе. Синтаксис таков:
if(<выражение>) { <действия1> } else { <действия2> }
Тоесть переводится дословно "Если выражение - истина, то выполнить действие1, иначе выполнить действие 2"
Использование else необязательно. Если его не писать будет выполняться только действие1 если выражение истинно
2.3 Оператор !
Восклицательный знак является оператором отрицания. То есть если поставить его перед выражением в конструкции if будет выполнятся действие1 только в том случае, когда выражение - ложь.
Теперь перейдем ко встроенным переменным:
х - указывает положение объекта по оси абсцисс
у - указывает положение объекта по оси ординат
xstart - указывает положение объекта при создании по оси абсцисс
уstart - указывает положение объекта при создании по оси ординат
хprevious - предыдущее местоположение объекта по оси абсцисс
yprevious - предыдущее местоположение объекта по оси ординат
speed - скорость движения объекта
direction - направление движения объекта
И необходимо учитывать,что начало координат в игровых конструкторах находится в левом верхнем углу.
Ну, с теорией покончено!
Приступим к созданию игры.
Загрузим из папки в игру спрайты и назовите их по названиям файлов.
Теперь создадим объект o_bat и присвоим ему спрайт. Также отметим галочку "твердый". В событии нажатия стрелки влево пропишем :
х-=6
Это будет двигать объект влево на 4 пикселя каждый шаг.
Теперь в событии нажатия стрелки вправо:
х+=6
Поставим её в комнату и протестируем. При нажатии кнопок влево-вправо она двигается.
Теперь создадим объект o_wall и присвоим ему соответствующий спрайт. Также отметим флажок "твердый". Теперь в объекте o_bat в столкновении с o_wall пропишем :
x = xprevious y = yprevious
Расставим по краям комнаты (кроме нижнего) стенки.
Теперь создаем объект o_ball и присвоим ему спрайт. В столкновении с o_wall и o_bat пропишем:
move_bounce(1)
Эта функция является аналогом действия Bounce.
В создании пропишем :
direction = random(360) speed = 6
Функция random(n) - выбирает случайное число в промежутке от 0 до n.
Теперь создадим объект o_brick и назначим ему твердость.
В создании напишем:
sprite_index = choose(s_brick_1,s_brick_2,s_brick_3)
Функция choose(m,n,b,..) - выбирает одно из указанных значений
В столкновении с шариком :
instance_destroy()
Функция instance_destroy() - уничтожает экземпляр
Теперь вернемся к шарику и в столкновении с o_brick напишем :
move_bounce(1)
Теперь расставим объекты по комнате и протестируем. Все в порядке, но стенки плохо выглядят на фоне кирпичиков и ракетки. Зайдем в объект o_wall и снимем галочку видимый.
Протестируем ещё раз... Вроде все хорошо, но когда шарик вылетает за пределы комнаты ничего не происходит. Ну ничего, мы это исправим... В событии outside room пропишем :
room_restart()
Функция room_restart() - перезапускает комнату.
Протестируем ещё раз. Теперь игра готова.
В следующем уроке : мы рассмотрим создание простейшей TDS(Top Down Shooter) игры. Эта игра потребует от вас полной версии Game makera. Её можно купить или воспользоваться "
И ещё...
Просьба оставить комментарий к статье - достаточно ли она понятна и все такое. Если у меня будет много читателей это существенно поднимет мне боевой дух)
6 января 2014 в 18:30
здравствуите. в первую очередь спасибо за урок. к счастью или горю, буквально несколько часов назад решил всерьез заняться изучением этой чудо программы -Game maker :D. вобщем старался делать все как было написано выше, вроде все получилось. Но, возникли некоторые непонятки: 1. шарик напролом сносит все кирпичи, не отбиваясь от них. почему так?. 2. иногда шарик по одной траектории носится от одной стены к другой туда-сюда... 3. шарик не правдоподобным образом отскакивает от ракетки. ракетка не придает инерцию шарику. (по крайней мере я ожидал лучшего) а так все нормально.
6 января 2014 в 21:21
Здравствуй.
А ты отметил флажок твердый в o_brick?
Если изначальное направление делать абсолютно случайным - выхода из такой ситуации нет(
В каком смысле инерцию? В арканоиде, в основном, плюют на законы физики.
Ну, этот арканоид мы не бросим. Мы вернемся к нему в 6 статье и дополним кучей вкусностей, используя приобретенные знания
7 января 2014 в 10:48
у o_brick твердость поставлена. очень редко сробатывает отталкивание шарика. видимо я гдето накосячил, придется самому разбираться(((
14 января 2014 в 19:27
Прикольный урок. Где можно скачать кряк на ГМ8?
14 января 2014 в 23:09
Вот тутhttp://yandex.ru/yandsearch?text=crack%20game%20maker%208&lr=213
1 апреля 2014 в 22:44
ЭЭЭ ну и где же новая статья?
1 апреля 2014 в 22:49
А как сделать так чтобы мяч в начале уровня был на доске и не куда не отскакивал а я мог бы доской двигать куда хочу а потом нажать на левую кнопку мыши и мячик отскочит от доски?
21 апреля 2014 в 14:08
Спасибо за хороший урок! все дословно и понятно когда следующий урок?
9 января 2015 в 22:11
Где писать всё это?
20 февраля 2015 в 12:17
Класный урок
21 декабря 2015 в 16:26
Делай ещё. Мне понравилось!!!!!!!!!!!!!!!!😍😀😃😄😌
25 марта 2016 в 19:28
Супр
9 декабря 2017 в 07:51
jxtym [jhjij
4 марта 2018 в 19:37
jjgjhb
авторизуйтесь
или войдите через