avatar

Box2d & Nape  

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

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

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

( Читать дальше )

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

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

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

( Читать дальше )

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

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

( Читать дальше )

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

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

( Читать дальше )

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

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

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

( Читать дальше )

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

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

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

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

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

( Читать дальше )
  • +21
  • 11 ноября 2011, 00:46
  • romamik
  • 3

romamikНовый 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.

Картинка для ясности

( Читать дальше )
  • +22
  • 30 октября 2011, 03:12
  • romamik
  • 7

romamikНовый 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.

( Читать дальше )
  • +16
  • 24 октября 2011, 20:11
  • romamik
  • 7

romamikНовый nape. Testbed. И немного теории.

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

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

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

( Читать дальше )
  • +23
  • 24 октября 2011, 02:13
  • romamik
  • 11

romamikНовый nape. Обработка событий.

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

В новом nape предусмотрена обработка самых разных событий:
1. Засыпание/просыпание тела;
2. Засыпание/просыпание соединения (ограничения взаимного движения, joint) тел;
3. Превышение допустимой нагрузки и разрыв соединения тел;
4. Начало/конец/продолжение контакта между телами.

На сегодняшний день впрочем не реализована большая часть этих возможностей.

( Читать дальше )
  • +18
  • 20 октября 2011, 14:32
  • romamik
  • 6