+54.33
12 читателей, 0 топиков

Перевод статьи Emanuele Feronato "Симуляция радиальной гравитации..."


Что-то давно в блогах не было статей в которых бы описывалась реализация чего-нибудь интересного связанного с физикой. Поэтому я решил добавить сюда свой перевод статьи Emanuele Feronato Simulate radial gravity (also known as “planet gravity”) with Box2D as seen on Angry Birds Space
Читать дальше →
  • +14

inkscape+nape=лю...

1
Всем привет.

Я тут решил сделать клон пушкиновую оригинальную игру с физикой, и задался вопросом, в чем делать уровни. Делать свой редактор сильно лень (это вообще преобладающее чувство последнее время). Flash IDE у меня нет. В общем решил посмотреть на Inkscape. Оказалось, что svg довольно простой формат для обработки. Не скажу, что я решил свою задачу полностью (см.выше про лень), но загрузка данных для физики из svg у меня есть.

скриншот
Читать дальше →

Исправление бага с утечкой памяти в box2d (memory leak solution, b2vec2)

В обработке контактов в box2d 2.1a есть баг, из-за которого память иногда безгранично наполняется объектами b2Vec2, а тела и их userData после удаления не собираются GC

Эта тема уже не раз поднималась, в т.ч. на официальном форуме бокс2д, но только сегодня мы совместными усилиями его локализовали и исправили :)
Читать дальше →

Делаем конвейер в Box2D - туториал

Добрый вечер, друзья. Сегодня, как и обещал, я хочу рассказать как делать логический конвейер в Box2D 2.1a.

Для начала обрисуем что же такое «логический конвейер». Этот термин, я придумал вчера.
Для его реализации нам не требуется большое количество тел и джоинтов, как для «физического», хватит и одного.
конвейеры
Alert: Тутор довольно увесистый.
Читать дальше →

Работа с maskBits и categoryBits в box2d

Когда начинал работать с box2d, и возникла потребность фильтровать контакты, некоторое время не мог вкурить что же это за маскбиты такие, и как с ними обращаться.
В статье расскажу для новичков об этом, а так-же самый удобный способ работы с маскбитами, который смог придумать. (версия box2d 2.1a)
Читать дальше →

"Честный" полёт стрелы в box2d

Замечал, что во многих играх с физикой и стрелами полёт стрелы смоделирован не очень хорошо.
Расскажу самый простой способ делать реалистичные стрелы в боксе
Читать дальше →

Своя гравитация для каждого тела в Box2d

Добрый вечер.
Это довольно короткий пост, потому я сначала поместил его в «Персональные».

Я только что добавил себе возможность применять к каждому телу свою статическую (только направление, нет притяжения к конкретной точке) гравитацию. Это занимает около минуты.
Решил выложить на случай, если кому-нибудь понадобится.
Читать дальше →

Новый nape. Приложение сил к телам и raycast

Новый nape:
1. Новый nape. Hello world
2. Новый nape. Обработка событий
3. Новый nape. Testbed. И немного теории
4. Новый nape. Создание тел, материалы, фильтрация столкновений
5. Новый nape. Соединение тел
6. Новый nape. Приложение сил к телам и raycast (Его вы сейчас читаете)

Все примеры кода в Testbed: Скачать проект для FlashDevelop.

Приложение сил и импульсов к телам.

Как мы можем повлиять на тело в nape? Можно просто указать ему новое положение или скорость — но такое воздействие лежит за пределами физической симуляции, можно прицепить к нему constraint — это вполне в рамках физики, но не всегда подходит, есть еще один вариант, и его мы не рассматривали, — можно приложить к телу силу или импульс.
Читать дальше →

Новый nape. Соединение тел.

Новый nape:
1. Новый nape. Hello world
2. Новый nape. Обработка событий
3. Новый nape. Testbed. И немного теории
4. Новый nape. Создание тел, материалы, фильтрация столкновений
5. Новый nape. Соединение тел (Его вы сейчас читаете)
6. Новый nape. Приложение сил к телам и raycast

Все примеры кода в Testbed: Скачать проект для FlashDevelop.

По сравнению, с той версией, что использовалась при написании первой части, были исправлены всякие ошибки в nape, в том числе касающиеся темы данной статьи, при написании примеров к этой статья я использовал версию m6.1 r61.

Соединения тел

Соединения тел в nape называются Constraint, более правильно это перевести как ограничение взаимного движения тел, но я буду все равно называть их соединениями. В nape есть следующие виды соединений:
  • PivotJoint — самое привычное соединение, два тела соединяются так, что две точки на них всегда совпадают
  • DistanceJoint — расстояние между двумя заданными точками двух тел поддерживается в заданных пределах
  • LineJoint — точка на одном теле движется по отрезку на другом теле
  • WeldJoint — два тела движутся полностью вместе, как если бы все их фигуры добавили к одному телу
  • AngleJoint — ограничивает угол поворота одного тела относительного другого в заданных пределах. Тела при этом могут разлететься как угодно далеко, так что обычно стоит использовать вместе с PivotJoint. Кроме того можно задавать соотношение углов поворота: это может пригодится, например, при создании чего-то вроде шестеренок.
  • MotorJoint — задает соотношение скоростей вращения двух тел. При определенных параметрах может использоваться как мотор. Также имеет смысл использовать вместе с PivotJoint.

Картинка для ясности
Читать дальше →

Новый nape. Создание тел, материалы, фильтрация столкновений.

Новый nape:
1. Новый nape. Hello world
2. Новый nape. Обработка событий
3. Новый nape. Testbed. И немного теории
4. Новый nape. Создание тел, материалы, фильтрация столкновений(Его вы сейчас читаете)
5. Новый nape. Соединение тел
6. Новый nape. Приложение сил к телам и raycast

Все примеры кода в Testbed: Скачать проект для FlashDevelop.

Немного про тела

Казалось бы уже рассматривали создание тел, тем не менее мне задают вопросы в личку, а значит мало рассматривали.

Тело (Body) в nape — это нечто, обладающее массой, моментом инерции, текущим положением и углом поворота, а также скоростями движения и вращения. Одно тело может состоять из нескольких фигур (Shape). У каждого тела есть своя собственная локальная система координат, которая движется и вращается вместе с телом, таким образом при движении тела в его собственной системе координат все фигуры остаются на месте. Для преобразования между системами координат у класса Body есть методы worldToLocal и localToWorld.
Читать дальше →