Проблема с битом маски коллизий в box2d 2.1 для flash

Салют, в настоящее время я работаю над игрой в бильярд во флэш-памяти, используя box2d для моделирования физики, и я застрял с фильтрацией столкновений.

Что я пытаюсь сделать, так это изменить бит маски столкновения мяча, когда он входит в карман, чтобы он не сталкивался с другими шарами (я не хочу удалять физический объект, потому что мне нужно сделать какой-то эффект перед ).

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

Я не знаю, почему, действительно ли возможно изменить бит маски во время выполнения?

Спасибо.


person paraple-geek    schedule 14.06.2012    source источник


Ответы (1)


Когда два прибора становятся рядом друг с другом (в частности, когда их AABB начинают перекрываться), создается b2Contact для управления взаимодействием между ними. Соответствующие данные для столкновения (трение, реституция и т. д.) копируются в этот b2Contact и сохраняются до тех пор, пока AABB не перестанут перекрываться. Это делается для эффективности, но побочным эффектом является то, что пока два AABB остаются перекрывающимися, биты маски коллизий больше не проверяются.

Один из способов обойти это — вручную отменить ответ на столкновение по умолчанию, вызвав contact->SetEnabled(false) в обратном вызове PreSolve для любых столкновений с забитым шаром. Это нужно будет делать каждый раз, когда вы получаете вызов PreSolve.

person iforce2d    schedule 15.06.2012
comment
Спасибо, теперь понял, очень помогло! - person paraple-geek; 15.06.2012