пятница, 9 ноября 2012 г.

Делаем игру-головоломку




Я больше чем уверен, что вы когда то играли в игру Angry Birds. Припоминаете эту игру? Нет? Забыли? А это ведь один из хитов 2009 года! Логическая игра Angry Birds увлекла более миллиона человек. Сегодня, как вы уже  догадались, мы попробуем сделать нечто похожее. 

И так, сохраняю традицию прошлого урока, перечисляя нужные нам спрайты:
  • bird - Злая птица, которой мы будем швыряться
  • block - Стена
  • enemy_spr - Враг
Размеры для этих спрайтов подбирайте на свой вкус, но я все же рекомендую выбирать именно 32x32. Пока обратите внимание на спрайт bird. Вам следует в меню редактирования спрайта щелкнуть по кнопке "По центру" иначе птичка будет очень криво летать.



Переходим к созданию объекта obj_bird, которому по логике вещей следует присвоить спрайт bird. Создаем событие Create для этого объекта. В этом событие напишите простой скрипт:

pusk:=false
Этот скрипт создает переменную pusk, которая в будущем будет разрешать или запрещать запуск птички. 

Далее создаем событие Step и там пишем более сложный скрипт:

if pusk=false then
begin
direction:=point_direction(x,y,mouse_x,mouse_y);
image_angle:=direction;
end;

if not hspeed<0.1 then
hspeed:=hspeed-0.1
Этот скрипт обращаясь к переменной pusk распознает, была ли птичка запущена. Если птичка до сих пор не полетела, то этот код разрешает игроку менять направление полета в сторону мыши(3-я строка). Так же этот скрипт помаленьку уменьшает горизонтальную скорость птички, так, что бы эта скорость не стала отрицательной(нам это не нужно).

Создаем пока что последнее событие для obj_bird - Glob Left Pressed. И в этом событие прорабатываем "пусковой механизм" птички при помощи следующего скрипта:

if pusk=false then
begin
speed:=26;
pusk:=true;
gravity:=1;
end;


Этот скрипт во первых проверяет - не запущена ли уже птичка. Если птичка не запущена, то этот скрипт создает мощный рывок и возводит стартовую скорость птички до 26. Так же этот скрипт включает гравитацию для нашей птицы, и что бы игроку не повадно было ускорить птицу до небывалых скоростей - присваивает переменной pusk значение true. Птица больше не полетит.

Пусковой механизм заработал, но мы упустили стены и конечно врагов. Начнем со стен, а вернее с общим объектом стены и врага. В общем создайте объект solid. В окне редактора объекта поставьте галочку над "Твердый". 


Далее переходим снова к объекту obj_bird. Создайте событие Столкновение с solid и добавьте действие Bounce() из вкладки MoveИ только после действия Bounceвставляем скрипт:

speed:=speed-5;
if speed<0 then
speed:=0;

Этот скрипт резко уменьшает скорость птицы, но при этом контролирует что бы эта скорость не была ниже 0, иначе, возможно что, птица будет летать вечно.

Теперь приступим к непосредственно созданию стен. Создайте объект wall и присвойте ему спрайт block. Так же присвойте этому объекту "родителя" - soild.


Теперь вы можете вставить все объекты в комнату и проверить правильно ли работает игра. Обратите внимание на то, что птичка должна пружинить от стен, а не врезаться в них.


Все работает правильно? Тогда приступаем к созданию врага. Создайте объект enemy и присвойте ему спрайт enemy_spr, так же поставьте ему "родителя" soild. Теперь займемся оживлением этого бота.

Создайте событие Create и там напишите скрипт:

health:=100;
gravity:=1;

Этот скрипт будет худо-бедно имитировать гравитацию бота, а так же его жизни. А теперь на случай если жизней ноль - создайте событие Step и напишите скрипт удаляющий бота:

if health=0 then
instance_destroy()
Ну и как бота можно убить? Конечно же нашей бешеной птичкой! Поэтому создаем событиеСтолкновение с obj_bird и напишите там следующий скрипт:

health:=health-10;
В общем бот готов, но если вы хотите что бы он не провалился сквозь землю(в прямом смысле) - создайте событие Столкновение с soild и перенесите туда как и в прошлый разBounce(). Ну и не забываем, что этого врага нужно как-то остановить. Поэтому добавляем последний скрипт:

vspeed:=0;
Фух... Игра готова! Снова расставим наши объекты в нужном порядке и наслаждаемся! Всем пока!

Комментариев нет:

Отправить комментарий