У цій статті описаний приклад з самої програми, під назвою AllBoxedUp. Його ви можете знайти в папці програми по шляху:
... \ Clickteam Fusion 2.5 \ Tutorials \ Allboxedup \ AllBoxedUp.mfa.
Сенс прикладу дуже простий, там круглими об'єктами потрібно збивати коробки і можна регулювати швидкість польоту, чимось дуже віддалено нагадує Angry Birds.
Трохи фізики - три закони Ньютона
1) Будь-яке тіло буде зберігати нерухомість або буде рівномірно рухатися до тих пір поки на нього не почнуть діяти зовнішні сили.
2) Тіло змінює свої координати в напрямку сили, яка на нього діє. Тіло припинить свій рух, коли сили діють на тіло дорівнюватимуть нулю. Якщо на тіло діють зовнішні сили, то характер руху тіла змінитися відповідно до напряму і кількістю доданою до нього сили.
3) Кожній дії сили є протидія.
Фізичний 2D світ на движку Fusion 2.5
Об'єкт движка Phisics - Engine обов'язково повинен бути доданий в кадр, щоб працювали фізико-орієнтовані об'єкти.
Бігова доріжка - переміщує об'єкти, які потрапляють на її. Рухається в певному і постійному темпі в обраному напрямку. Цей об'єкт ідеально підходить для створення бігової доріжки або ліфтів для ігор типу платформер.
Мотузка або ланцюг - створює реалістичну мотузку в фізичному світі.
Частинки - це генератор частинок. Це створює незліченну кількість частинок в фізичному світі, з різною швидкістю і напрямком.
Магніт - працює як магніт у фізичному світі: він притягує об'єкти, які знаходяться в зоні його тяжіння. Чим ближче до магніту, тим сильніше від притягує.
Вентилятор - працює як вентилятор в фізичному світі: він створює потік повітря. Будь-який об'єкт, який потрапляє в цей потік буде відчувати вплив сили в напрямку потоку. В результаті об'єкт буде повільно прискорюватися в напрямку потоку повітря.
Напрямок і сила повітря можуть бути встановлені у властивостях або діях.
Булавка - дозволяє з'єднувати фізичні об'єкти між собою. Помістіть його поверх об'єктів, які потрібно об'єднати, об'єкти будуть пов'язані між собою в тому місці де накладена шпилька.
Земля - дозволяє визначити поверхню в Box2D. Являє собою послідовно з'єднані точки з яких можна викласти будь-яку форму поверхні.
І фізичні типи рухів активного об'єкта.
Об'єкт фізичного 2D світу має ряд загальних параметрів світу таких як:
- Сила тяжіння або сила тяжіння (Gravity strength) - cила гравітації для кожного об'єкта індивідуальна і складається з двох параметрів: маса тіла і гравітаційна стала. У наших земних умовах вона дорівнює 9.8 у Fusion 2.5 ви можете задавати будь-яке її значення (за замовчуванням цей параметр дорівнює 10.000000).
- Напрямок тяжіння (Gravity angle) - можна задавати напрямок для сили тяжіння (за замовчуванням - вниз).
- Фізичні властивості об'єктів декорацій / перешкод (Backdrop objects)
- Сила тертя (Friction) - чим більше цей коефіцієнт, тим гірше об'єкти будуть ковзати по поверхні декорацій / перешкод.
- Сила пружності (Elasticity) - напрям сили пружності протилежно напрямку зіткнення (якщо об'єкт падає на інший об'єкт зверху вниз, то сила пружності буде спрямована вгору). Чим більше це значення тим сильніше тіло буде відскакувати від поверхні декорацій / перешкод.
- фізичні властивості куль / снарядів (Projectiles)
- Щільність (Density)
- Гравітаційна шкала (Gravity scale) - визначає міру схильності силі тяжіння у кулі, значення менше 100 надає об'єкту невагомість, понад 100 ускладнює об'єкт.
- Тертя (Friction) куль
- Пружність (Elasticity) куль
- Налаштування для чи не фізичних об'єктів при взаємодії з фізичними (Non-physical objects).
Всі сили є векторами.
Так само в фізичному світі існують ще такі стану фізичного тіла:
- швидкість
- Прискорення - швидкість зміни швидкості
- Імпульс - міра руху. При зіткненні двох об'єктів напрямок і швидкість руху кожного з об'єктів визначається сумою їх імпульсів.
- Механізми - з'єднання двох і більш об'єктів для перетворення одного типу руху в інший. Для з'єднання об'єктів використовується інструмент Phisics - Joint
Вони не є силами з точки зору фізики, але так само впливають на фізичні об'єкти.
Всі властивості фізичного світу і його об'єктів будуть розглянуті докладніше в майбутніх прикладах, але зараз, давайте перейдемо до застосування деяких основних можливостей фізики в рамках даного прикладу.
Зіткнення фізичних тіл
Круглі об'єкти, які запускаються натисненням правої кнопки миші мають тип фізичного відскакує м'ячика (Physics - Bouncing Ball movement).
Параметри на які тут варто звернути увагу це:
- initial direction - початковий напрямок
- 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.
решта об'єктів
Об'єкт життів, який обмежує кількість випущених кіл. Краще збільшити їх кількість, а то 3 постріли це дуже мало.
Об'єкт очок, очки нараховуються за кожну впала на землю коробку.
Маленький червоний квадратик - використовується для відображення координат миші, за замовчуванням невидимий.
Тепер давайте розглянемо події фізики в коді.
Застосування подій фізики
Я просто буду пояснювати кожну подію по порядку.
1) Подія зіткнення коробок з перешкодою, потрібно для того що б коробки зупинялися торкаючись землі
2) Подія зіткнення коробок один з одним
3) Подія зіткнення кіл один з одним
4) Подія зіткнення кіл з землею
5) Зіткнення коробок і кіл
6) Присвоєння координат об'єкту маленького червоного квадратика до координат миші.
Потрібно для того, що б застосувати цей об'єкт в якості орієнтира для напрямку руху круглого об'єкта.
7) Коли натиснута ліва клавіша миші на значку плюсик, лічильник збільшується на 2.
8) Коли натиснута ліва клавіша миші на значку мінуса, лічильник зменшується на 2.
9) Коли клацаєш правою кнопкою миші - Куля коло. Тут все по порядку:
* Клік правою кнопкою миші
+При тому, що кількість життів більше нуля
- Створюється коло
- Коло встановлюється в напрямок до червоної точки
- Швидкість кола встановлюється в значення лічильника
- видаляється 1 життя
10 і 11) Чи не дає піти коробок і колам за сцену вправо
12) Коли коробка падає вона додає 1 очко.
Подія реалізовано наступним чином: якщо координата Y коробки менше 270 (це координата землі на якій стоять коробки), то додавати 1 очко. АЛЕ окуляри нараховувалися б не перестаючи поки коробка лежить, для того, що б такого не відбувалося використовується змінна прапор від коробки. Коли прапор вимкнений нараховується очко, а після цього включається прапор, забороняючи подальше виконання цієї події. Оскільки це прапор коробки, то і подія відбуватиметься для кожної конкретної коробки.
Ще один маленький приклад з фізикою. По кліку ЛКМ падає коробка
Введення в фізичний движок Box2D
Введення в фізичний движок Box2D