В этой статье описан пример из самОй программы, под названием AllBoxedUp. Его вы можете найти в папке программы по пути:
…\Clickteam Fusion 2.5\Tutorials\Allboxedup\AllBoxedUp.mfa.
Смысл примера очень простой, там круглыми объектами нужно сбивать коробки и можно регулировать скорость полета, чем-то очень отдаленно напоминает Angry Birds.
В настоящее время появляется все больше новых игр основанных на физике.
Если вы хотите, создать игру с применением физических взаимодействий между объектами, то эта короткая вводная статья о том как работать с физическим движком Box2D в конструкторе игр Fusion 2.5!
Немного физики — три закона Ньютона
1) Всякое тело будет сохранять неподвижность или будет равномерно двигаться до тех пор пока на него не начнут действовать внешние силы.
2) Тело изменяет свои координаты в направлении силы, которая на него действует. Тело прекратит свое движение, когда силы действующие на тело будут равны нулю. Если на тело действуют внешние силы, то характер движения тела измениться в соответствии с направлением и количеством приложенной к нему силы.
3) Каждому действию силы есть противодействие.
Физический 2D мир на движке Fusion 2.5
Объект движка Phisics — Engine
Беговая дорожка — перемещает объекты, которые попадают на её. Движется в определенном и постоянном темпе в выбранном направлении. Этот объект идеально подходит для создания беговой дорожки или лифтов для игр типа платформер. | |
Веревка или цепь — создает реалистичную веревку в физическом мире. | |
Частицы — это генератор частиц. Это создает бесчисленное количество частиц в физическом мире, с различной скоростью и направлением. | |
Магнит — работает как магнит в физическом мире: он притягивает объекты, которые находятся в зоне его притяжения. Чем ближе к магниту, тем сильнее от притягивает. | |
Вентилятор — работает как вентилятор в физическом мире: он создает поток воздуха. Любой объект, который попадает в этот поток будет испытывать воздействие силы в направлении потока. В результате объект будет медленно ускоряться в направлении потока воздуха. Направление и сила воздуха могут быть установлены в свойствах или действиях. | |
Булавка — позволяет соединять физические объекты между собой. Поместите его поверх объектов, которые нужно объединить, объекты будут связаны между собой в том месте где наложена булавка. | |
Земля — позволяет определить поверхность в Box2D. Представляет собой последовательно соединенные точки из которых можно выложить любую форму поверхности. |
И физические типы движений активного объекта.
Объект физического 2D мира
- Cила притяжения или сила тяжести (Gravity strength) — cила гравитации для каждого объекта индивидуальна и состоит из двух параметров: масса тела и гравитационная постоянная. В наших земных условиях она равна 9.8 во Fusion 2.5 вы можете задавать любое её значение (по умолчанию этот параметр равен 10.000000).
- Направление притяжения (Gravity angle)- можно задавать направление для силы тяжести (по умолчанию — вниз).
- Физические свойства объектов декораций/препятствий (Backdrop objects)
- Cила трения (Friction) — чем больше этот коэффициент, тем хуже объекты будут скользить по поверхности декораций/препятствий.
- Сила упругости (Elasticity) — направление силы упругости противоположно направлению столкновения (если объект падает на другой объект сверху вниз, то сила упругости будет направлена вверх). Чем больше это значение тем сильнее тело будет отскакивать от поверхности декораций/препятствий.
- физические свойства пуль/снарядов (Projectiles)
- Плотность (Density)
- Гравитационная шкала (Gravity scale) — определяет меру подверженности силе тяжести у пули, значение менее 100 придает объекту невесомость, более 100 утяжеляет объект.
- Трение (Friction) пуль
- Упругость (Elasticity) пуль
- Настройки для не физических объектов при взаимодействии с физическими (Non-physical objects).
Все силы являются векторами.
Так же в физическом мире существуют ещё такие состояния физического тела:
- Скорость
- Ускорение — быстрота изменения скорости
- Импульс — мера движения. При столкновении двух объектов направление и скорость движения каждого из объектов определяется суммой их импульсов.
- Механизмы — соединение двух и более объектов для преобразования одного типа движения в другой. Для соединения объектов используется инструмент Phisics — Joint
Они не являются силами с точки зрения физики, но так же оказывают влияние на физические объекты.
Все свойства физического мира и его объектов будут рассмотрены подробнее в будущих примерах, но сейчас, давайте перейдем к применению некоторых основных возможностей физики в рамках данного примера.
Столкновение физических тел
Круглые объекты, которые запускаются нажатием правой кнопки мыши имеют тип физического отскакивающего мячика (Physics — Bouncing Ball movement).
Параметры на которые здесь стоит обратить внимание это:
- initial direction — начальное направление
- initial speed — нальная скорость
- Density — плотность. Изменяя плотность вы меняете массу объекта.
- Масса не устанавливается в свойствах. Масса вычисляется из двух значений: плотность объекта и его размер. Масса влияет на то, насколько сложно будет сдвинуть объект если он стоит, и насколько сложно будет оставить объект если он движется. И еще насколько сильно объект толкает другие объекты.
- Friction — сила трения — имеет значение когда один объект скользит по поверхности другого. Чем больше этот коэффициент, тем хуже объекты будут скользить.
- Elasticity — упругость — имеет значение при столкновении объектов. Чем больше это значение, тем сильнее объект отскочит после удара.
- Gravity scale — гравитационная шкала или другими словами Сила Притяжения. У каждого объекта можно индивидуально задать коэффициент отклонения от силы притяжения, которая устанавливается в объекте мира
. Т.е. 100 — это нормальная гравитация, менее 100 придает объекту невесомость, а более 100 утяжеляет объект.
Попробуйте измять эти параметры и зацените как меняется поведение кругляшков.
На самом деле вы не сможете сбить ни одного ящика с текущими настройками кругляшков.
- Collision shape — форма взаимодействия. Задать форму, которой будет являтся объект. Можно установить форму круга (Circle) или квадрата(Box), ну и еще есть третий параметр — определить форму по первой картинки объекта, т.е. по первому кадру (shape of first image).
Точка G у любого физического объекта должна быть в центре, иначе он будет двигаться неправильно.
Попробуйте поставить её в угол, ради прикола, и увидите, что будет.
С коробками дело обстоит так:
- Тип объекта — статический физический объект (Physics — Static movement)
- Форма взаимодействия — квадрат/коробка (Collision shape — Box)
У земли тип Physics — Background c параметром Obstacle (препятствие) и формой — Box.
Остальные объекты
Объект счетчика
Объект жизней
Объект очков
Маленький красный квадратик — используется для отражения координат мыши, по умолчанию невидим.
Теперь давайте рассмотрим события физики в коде.
Применение событий физики
Я просто буду объяснять каждое событие по порядку.
1) Событие столкновения коробок с препятствием, нужно для того что бы коробки останавливались касаясь земли
2) Событие столкновения коробок друг с другом
3) Событие столкновения кругов друг с другом
4) Событие столкновения кругов с землей
5) Столкновение коробок и кругов
6) Присвоение координат объекта маленького красного квадратика к координатам мыши.
Нужно для того, что бы применить этот объект в качестве ориентира для направления движения круглого объекта.
7) Когда нажата левая клавиша мыши на значке плюсика, счетчик увеличивается на 2.
8 ) Когда нажата левая клавиша мыши на значке минуса, счетчик уменьшается на 2.
9) Когда кликаешь правой кнопкой мыши — пуляешь круг. Тут все по порядку:
*Клик правой кнопкой мыши
+При том, что количество жизней больше нуля
— Создается круг
— Круг устанавливается в направление к красной точки
— Скорость круга устанавливается в значение счетчика
— удаляется 1 жизнь
10 и 11) Не дает уйти коробкам и кругам за сцену вправо
12)Когда коробка падает она добавляет 1 очко.
Событие реализовано следующим образом: если координата Y коробки меньше 270 (это координата земли на которой стоят коробки), то прибавлять 1 очко. НО очки начислялись бы не переставая пока коробка лежит, для того, что бы такого не происходило используется переменная флаг от коробки. Когда флаг выключен начисляется очко, а после этого включается флаг, запрещая дальнейшее выполнение этого события. Т.к. это флаг коробки, то и событие будет происходить для каждой конкретной коробки.
Ещё один маленький пример с физикой. По клику ЛКМ падает коробка
Надеюсь, что эта статья была полезной для вас.