Меню сайта


Статистика



Главная » Статьи » Уроки » Конструкторы игр

Урок по Game Maker
Идём в объект противника, для начала делаем так чтобы картинка менялась в зависимости от направления движения объекта.
В событии шага (step) кладём скрипт, там прописываем:

image_single=direction*image_number/360

Дальше нам надо что бы объект двигался, в событии создания (create) кладём красную кнопу (start mooving in directions), выбираем все направления, ставим скорость 3.
Дальше нам надо чтобы направление через какой-то промежуток времени менялось. Для этого в событии создания объекта кладём Часы - Alarm0, интервал 70.
В событии Alarm0 кладём нашу кладём красную кнопу (start mooving in directions), выбираем все направления, ставим скорость 3. Добавляем ещё часы Часы - Alarm0, интервал 70. У нас получился бесконечный цикл - через 70 чагов противник будет выбирать случайное направление. Если 8 стандартных направлений мало, тогда нашу красную кнопу заменяем на скрипт в котором прописываем что-то типа:

direction=random(360)

Делаем комнату, ставим противника, запускаем, смотрим.

Дальше, нам наверняка не нравиться что противник иногда исчезает в неизвестных далях за краем холста, предлагаю сделать так чтобы он появлялся из за противоположного края холста. Ставим событие Intersect bounary, в нём ставим скрипт в котором прописываем:

if (x<0) {x=room_width}
if (x>room_width) {x=0}

if (y<0) {y=room_height}
if (y>room_height) {y=0}

Надеюсь с кодом всё понятно.

Сделаем так, чтобы при попадании снаряда игрока, противник начинал охотиться за игроком.
Делаем спрайт снаряда (или пули), создаём объект снаряда.
В событии создания противника добавляем скрипт, в котором задаём значение переменной, благодаря которой будет определяться поведение противника:

global.battle=false

если значение false значит мир, если true, значит война.

Делаем спрайт пули, создаем объект Pyla.

Теперь настало время немного заняться игроком.
Движение будет осуществляться с помощью стрелок, выстрел с помощью левой кнопы мыши.
В объекте игрока ставим 4 события нажатия стрелок клавиатуры, в каждой ставим красную кнопу задания движения, с соответствующим направлением и скоростью. Для прикола задаём объекту трение, кидаем в событие создания иконку трения (set the friction) со значением 0.1.
Выстрел, он будет производиться при нажатии левой кнопки в произвольном месте экрана, пуля будет лететь в направлении от объекта игрока к месту где была нажата мышь.
Один из способов "поймать" клик в произвольном месте экрана состоит в создании невидимого объекта который постоянно следует за мышью. Итак делаем спрайт, ничего на нём не рисуем, убираем у него галку прозрачности (transparent), ставим значения origin 16/16. Создаём невидимый объект (Nevid) с этим спрайтом, отключаем галку Visible, кидаем скрипт в событие шага (step), там прописываем:

x=mouse_x
y=mouse_y

Теперь делаем собственно создание пули.
Ставим в событие Left Pressed нашего невидимки скрипт, там прописываем:

igr_pula=instance_create(Igrok.x,Igrok.y,Pyla)
igr_pula.speed=5
igr_pula.direction=point_direction(Igrok.x,Igrok.y,mouse_x ,mouse_y)

Не забываем расположить этот объект в комнате.
Запускаем, смотрим.

В обьекте Pyla в событии Collision event с противником, ставим сначала событие уничтожения объекта, затем скрипт, в котором пишем:

global.battle=true //(это объявление войны)

Ставим также событие Outside Room, в нём также уничтожаем объект.

Теперь собственно сделаем поведение нашего AI противника в состоянии войны.
Он должен преследовать игрока и производить выстрел по ходу движения.
Через определённый промежуток времени (допустим 1-2 секунды) противник будет менять своё направление в сторону игрока.
Прежде всего сделаем для него пулю (PylaAI), по примеру пули игрока делаем уничтожение пули при столкновении с игроком и при выходе за пределы комнаты.

Теперь идём в объект противника, в событии создания добавляем таймер Alarm1 через 40 шагов.
В событии этого таймера (Alarm1) ставим скрипт в котором прописываем:

if(global.battle==true)
{
direction=round (point_direction (x,y,Igrok.x,Igrok.y) /45) *45
pr_pula=instance_create (x,y,PylaAI)
pr_pula.speed=5
pr_pula.direction=direction
}

Тут всё просто за исключением строки:
direction=round(point_direction (x,y,Igrok.x,Igrok.y) /45) *45
В ней мы определяем направление движения, основа строки
point_direction (x,y,Igrok.x,Igrok.y), которая определяет точное направление от противника к игроку, но сложность в том, что у нас противник движется только в 8 направлениях, если мы определили точное направление 190 градусов, двигаться надо в направлении 180 градусов. Формула такая - (ближайшее целое число от (направление/(360/количество направлений)) * 360/количество направлений.
или
ближайшее целое число от (направление/(360/8))) * 45.
или
round (point_direction (x,y,Igrok.x,Igrok.y) /45) *45

Собственно всё, основа есть.

Категория: Конструкторы игр | Добавил: di_snayder (10.08.2009) | Автор: di_snayder
Просмотров: 2912 | Рейтинг: 3.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Скачать