Суббота, 27 Апреля 2024, 14:26

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [355]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [145]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [161]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [129]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Сколько всего игр вы прошли?
Всего ответов: 4183
Главная » Статьи » Создание игр

"Angry birds" физика в Game Maker. Враги. ч.1

Собственно, пора начать без лишних предисловий. Для начала разберемся, какие спрайты нам нужны:
spr_ball (вместо птичек - шарики)
spr_enemy (враг) Не рисуйте круг, иначе не увидите его физики (точнее не всю физику)!
spr wall (тут стена, потом будем менять).
Далее создаем аналогичные объекты(obj_ball,obj_enemy,obj_wall)
Заходим к мячику, в создание пишем:

Код
gravity = 0.2;//Гравитация = 0.2
gravity_direction = 270;//Гравитация направляет вниз
varDrag = false;//Эта переменная отвечает за зажатую мышку и стрельбу.
varDir=0;//Направление полета

Дальше создаем событие нажатия ЛКМ, пишем:
Код
varDrag = true;//"Зажим" активирован

Теперь создаем событие "глобальная правая кнопка отпущена", пишем:
Код
if (varDrag = true) {//Если зажим активирован...
  varDist = distance_to_point(mouse_x, mouse_y) / 5;//Скорость полета равна расстоянию до курсора..
  if varDist>15 varDist=15;//Ограничение на скорость (не больше 15)
  motion_add(point_direction(x, y, mouse_x, mouse_y), varDist);//Направление равно месту нахождения мыши, скорость равна расстоянию до мыши/5. Запуск!
  varDrag = false;//Дезактивируем зажим.
}

Надеюсь вы поняли этот код, так как для новичков он довольно сложен.
Так-с, почти закончили с мячиком. Добавим столкновение с врагом, пишем:
Код
varDir = point_direction(x, y, other.x, other.y);//Направление равно месту нахождения врага...
with (other) {//Действие для другого объекта (врага)
  motion_add(other.varDir, other.speed/2);//Отскок другого объекта если возможно. Скорость отскока в уменьшается в 2 раза (значение не волнует)
}
move_bounce_all(true);//Отскок мяча
vspeed = vspeed / 2;//Уменьшаем в 2 раза вертикальную...
hspeed = hspeed * 0.50;//и горизонтальную скорость.

Хух.. С игроком закончили.
Переходим к врагу, пишем в создание:
Код
hp=100;//Жизнь равна 100

gravity = 0.2;//Гравитация=0.2
gravity_direction = 270;//Гравитация тянет вниз
varDrag = false;//Это уже не зажим, а, скорее переменная для столкновения с игроком  
varDir=0;//Направление отскока в случае столкновения с игроком.
rot=0//Переменная поможет нам с физикой

В step пишем мега-сложный код:
Код
if hp<=0
{instance_destroy()}//Если жизнь меньше или равна нулю - уничтожение

И добавим столкновение с игроком. Пишем до боли знакомый код (или не знакомый?)
Код

varDir = point_direction(x, y, other.x, other.y);//направление равно стороне столкновения с игроком
with (other) {//Для другого объекта...
  motion_add(other.varDir, other.speed/2);//Отскок, с уменьшенной в 2 раза скоростью игрока и его направлением.
}

move_bounce_all(true);//Отскок от любого объекта (твердого или нет)
vspeed = vspeed / 2;//Уменьшаем в 2 раза вертикальную...
hspeed = hspeed * 0.50;//И горизонтальную скорости

hp-=other.varDir/10;//Отнимаем столько жизни, скольки равна скорость игрока деленная на 10

И наконец то заканчиваем. Пишем последний код в рисовании:
Код

draw_sprite_ext(sprite_index,image_index,x,y,
image_xscale,image_yscale,rot,noone,image_alpha)//Рисуем спрайт врага, возможность изменения поворота есть (при столкновении с игрком или стеной).

draw_set_alpha(0.6)
draw_healthbar(x-25,y-30,x+25,y-25,hp,c_black,c_white,c_white,180,1,1)//Рисуем хелсбар (индикатор жизни).
draw_set_alpha(1)

А, да, чуть не забыл. И игроку и врагу в столкновении со стеной напишите:
Код
move_bounce_all(true);
vspeed = vspeed / 2;
hspeed = hspeed * 0.90;

Только у врага измените значение 0.90 на 0.50. Этот код служит для остановки при столкновении.

Я понимаю, что подобную статью писал arkady, однако тут у врагов есть жизни и физика. А главное присутствуют комментарии к уроку (надеюсь, эти изменения в лучшую сторону). До свидания!
  • Пример к уроку
  • Категория: Создание игр | Добавил: CreatingOver (21 Августа 2013)
    Просмотров: 9542 | Комментарии: 3 | Рейтинг: 3.4/8 |
    Теги: птички, GM пример, Полет, angry, Game Maker, физика, GML, Angry Birds, программирование, Физика врагов
    Дополнительные опции:
    Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

    Игровые объявления и предложения:
    Если вас заинтересовал материал «"Angry birds" физика в Game Maker. Враги. ч.1», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

    Всего комментариев: 3
    +1-
    3 CreatingOver   (28 Августа 2013 09:12) [Материал]
    CreatingOverКод Мальцева Богдана.

    +2-
    1 Fargost   (21 Августа 2013 21:02) [Материал]
    FargostУрок может и про злых птичек, но тут опять же, недоделка, можно было дописать ограничения, к примеру на направление запуска птицы, запрет на повторное использование птиц и подобное. Вообще сыро, лучше доделать статью про злых птиц до конца чем брать и корректировать чужое....

    +2-
    2 CreatingOver   (22 Августа 2013 08:37) [Материал]
    CreatingOverЯ сейчас следующий урок буду писать, там индикатор направления добавим добавим, он же как ограничение

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Поиск по сайту
    10 случ. движков
  • CryEngine V
  • VCMI
  • DAAD Adventure Writer
  • NetGore
  • WinDoom
  • LÖVR
  • Castle Game Engine
  • Odamex
  • Quake II
  • EasyRPG
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг