Урок от MaximXGame - причём первый, так что извиняюсь, если про Arkanoid что-то было и ещё за мои ошибки.
Сложность: для только-только обучившихся Game Maker новичков до молодых продвинутых.
Этот урок характерен для Game Maker 5.x, 6.x, 7.x и 8.x. Не знаю, совместим ли он с Game Maker 4.x.s_bat, s_ball... Начнём с чистого листа.И так, либо загружаем, либо рисуем спрайт размером как минимум 48х16
(или больше). Это у нас будет платформа (s_bat). Далее, загружаем шарик (s_ball). Минимум размер должен быть 8х8, иначе мы можем запросто не увидеть шарик. Стенку - минимум 16х16 (я нарисовал размера 24х24) (s_wall). В s_ball и s_bat ставим центр. Затем добавляем объекты под нашими спрайтами (назовём их o_bat, o_ball и o_wall, для каждых спрайт под своими названиями). Перейдём к o_bat. Для начала добавим управление.
Добавляем событие "Клавиатура -> Left (Right)". Далее набираем код для события
Right:action_move("000001000",4);
Left:action_move("000100000",4);
Вместо 4 можно менять цифру желательно до 10.
Добавляем событие Step Event (выбрать Step). Далее пишем:
x = mouse_x
Далее перейдём к o_wall. Ставим галочку Solid. С ним ничего не делаем.
Перейдём к o_bat и напишем код при событии Столкновения с o_wall:
x = xprevious
y = yprevious
Дальше перейдём к o_ball. Добавляем событие Create. Пишем код:
motion_set(70+random(40),6);
6 - это скорость. Можно её изменять.
Делаем столкновение со стеной (o_wall). Там пишем код
move_bounce_solid(false);
И с платформой (o_bat).
move_bounce_all(true);
Это временный код. Затем мы поменяем этот код, или даже удалим, так сказать.Теперь добавляем событие Outside Room (Other -> Outside Room). В нём пишем код:
screen_redraw();
sleep(1000);
game_end();
Мы окончили базовые принципы игры! Теперь расставляйте объекты в комнате и играйте. Не заметили, что вы сделали арканоид, но без физики? Мы эту физику сделаем в следующем разделе!
Блоки мы так же сделаем в следующем разделе.
Без цели и физики хорошую игру не сделаешь!И так, удаляем события столкновения с объектом o_bat у o_ball.
Далее перейдём к o_bat. Делаем столкновение с объектом o_ball.
Пишем код:
{
if (other.x < x)
{ other.direction = 110 + 80*(x-other.x)/sprite_width;}
else
{ other.direction = 70 + 80*(x-other.x)/sprite_width;}
if (other.y > y) other.direction := 360-other.direction;
}
Физика создана. Теперь поиграем в игру. Заметили разницу? Теперь шарик при столкновении с платформой отскакивает как в Arkanoid и Arkanoid 2: Revenge of DoH!
Далее, создаём спрайт с названием s_stone. Как вы догадались, разрушаемая стена. Загружаем для неё спрайтик, или сами рисуем (минимум 48х16). Загружаем объект o_stone, со спрайтом s_stone. Делаем объект твёрдым. Перешли к o_ball. Делаем столкновение с o_stone. Пишем код:
move_bounce_solid(false);
with(other) instance_destroy();
score=score+1
Ставим o_stone по комнате, загружаем игру. Получился Arkanoid Developer Release.
Но, после того, когда вы разбили блоки до последнего, у вас возникнет вопрос - как перейти в следующую комнату? Это мы изучим в следующем разделе.
Контроллер - миф в играх или реальность?Контроллер - это реальность невидимая. Он определяет переменные, как lives, score, enemies... Иными словами, нельзя без него создать хорошую игру! Приступим. Создаём объект c_controller. В Step event пишем (мы уже довольно начитались, как куда переходить):
if (instance_number(o_stone)=0)
{
if (room_next(room)>-1)
{
room_goto_next()
transition_kind=2
}
else
{
highscore_show_ext(score,c_white,true,255,0,"Courier New",10);
game_restart();
}
}
Вместо c_white - ваш Background или цвет как c_black, c_red... В Courier New - шрифт, в 10 - размер этакого шрифта.
В transition_kind=2 - анимацию в следующий уровень.
Если ещё хотим реализовать жизни, то добавляем событие Create и там пишем:
lives=3
action_set_caption(true,"Score:",true,"Lives:",false,"health:");
Добавляем No More Lives, там пишем:
highscore_show_ext(score,c_white,true,255,0,"Courier New",10);
game_restart()
Чуть-чуть изменим код в o_ball в событии Outside Room. Теперь вместо
screen_redraw();
sleep(1000);
game_end()
надо изменить на
x=xstart;
y=ystart;
with(o_bat)
{
x=xstart;
y=ystart;
}
screen_redraw();
sleep(1000);
lives=lives-1
Вот, теперь добавьте контроллер в комнату свою. Вы заметите, что контроллер поможет вам перейти в следующую комнату, проверяет жизни и выдаёт доску для лидеров.
На следующем уроке мы узнаем об разрушаемых блоках, которые разрушаются только через несколько раз, об бонусных блоках и так далее. А пока украшайте свою игру обоями, звуками и т.д. До встречи!

Как я говорил в начале, это мой первый туториал. Так что помогайте, если что-то не так. Я буду только рад, если вы напишите в комментах пожелания.

Скачать исходник внизу.