Найти тему

Некоторые особенности физики в Game Maker Studio

Оглавление

Добрый день, дорогие читатели! Сегодня в этой краткой статье хотелось бы рассказать о том, что не упомянул в прошлых уроках. Как только вы включаете галочку использования физики в комнате и на объекте, то важно помнить о некоторых вещах.

Включение физики в комнате
Включение физики в комнате
Включение физики в объекте
Включение физики в объекте

Группы столкновений (коллизий)

В прошлых уроках я не затронул один из таких важных физических параметров объекта, как Collision Group:

Параметр объекта Collision Group
Параметр объекта Collision Group

По умолчанию, физические объекты между собой не сталкиваются и никак не взаимодействуют. Для столкновения необходимо, чтобы оба объекта были включены в одну и ту же группу столкновений. Т.е. если вы хотите, чтобы два объекта, например, шар и куб сталкивались между собой, то необходимо в параметрах им назначить одинаковую группу столкновений (1, 2, 3 и т.д.).

Но, во-первых, сами создатели движка GMS, не рекомендуют пользоваться таким способом, а ,во-вторых , если уж без этого никуда, то рекомендуют использовать как можно меньше данных групп (все они должны иметь положительное число!)

Но как же сделать так, чтобы физические объекты автоматически обрабатывали столкновения, но при этом без использования групп? Есть очень простой способ. Для этого вам всем объектам необходимо назначить нулевую группу 0. Это значит, что объекты в этой группе будут сталкиваться только в том случае, если вы принудительно пропишите столкновения в объектах. А чтобы это сделать, достаточно в объект добавить событие столкновения с нужным нам объектом:

Добавляем в объект событие столкновения с другим физическим объектом
Добавляем в объект событие столкновения с другим физическим объектом

При этом никакой код писать в самом событии не требуется! Достаточно просто оставить в нем комментарий:

В событии код писать не требуется!
В событии код писать не требуется!

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

Если вы в группе столкновений укажите какое-нибудь отрицательное число (а не ноль и не положительное), то объекты в такой группе вообще не будут сталкиваться ни при каких обстоятельствах (ни по умолчанию, ни при наличии события столкновения в объекте).

Форма столкновения (Fixture)

При "обычной" системе коллизий ваши коллизии основаны на маске спрайта, назначенного объекту, но при включенной физике это уже не так.

Редактирование маски столкновения в редакторе спрайта (для "обычной" системы)
Редактирование маски столкновения в редакторе спрайта (для "обычной" системы)

При включенной физике вам нужно самим назначить объекту форму столкновения (она называется Fixture), которая может быть либо кругом, либо прямоугольником, либо многоугольником (не вогнутым!) с кол-вом вершин от 3 до 8. Эти формы вы сами назначаете объекту и редактируете в параметрах объекта через Modify collision shape:

Редактирование физической формы столкновения
Редактирование физической формы столкновения

Отключение функций движения и переменных "обычной" системы

Как только вы включили галочку "физика" знайте, что многие другие функции (и встроенные переменные) перестают работать в физическом мире. Большая часть из них связана с движением. Например, встроенные переменные скорости: speed, vspeed и hspeed в физическом мире вы уже не сможете использовать. Или, например, функции движения: motion_add, move_snap, move_wrap, move_towards_point, mp_linear_step и многие-многие другие. По этому, если в физическом мире GMS у вас что-то не получается реализовать, какие-то функции не работают, то не спешите паниковать, вероятнее всего они просто не могут быть использованы при используемом физическом движке Box2D.

Очень важно помнить об этих трех основных особенностях в Game Maker Studio при включенном физическом движке Box2D.

Игра "Angry Birds", основанная на физическом движке Box2D (изображение взято из сети)
Игра "Angry Birds", основанная на физическом движке Box2D (изображение взято из сети)

Спасибо, что дочитали статью до конца! Надеюсь она окажется вам полезной. Ставьте лайки, делитесь ей с другими, задавайте вопросы, оставляйте комментарии, пожелания и т.д. Удачи с изучением!