Быстро движущиеся тела пропускают столкновения иногда в Box2d, AndEngine - PullRequest
4 голосов
/ 29 ноября 2011

У меня есть быстро движущееся тело (A), которое динамично.Предполагается, что он столкнется с другим Телом (B).A сталкивается с B, но иногда он проходит тело B без столкновения.Это абсолютно случайное поведение.Я должен иметь это столкновение.Пожалуйста, объясните, почему так действует случайным образом.

1 Ответ

8 голосов
/ 29 ноября 2011

Эффект одного объекта, проходящего через другой из-за большого движения за один временной шаг, называется tunneling .

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

Из Box2d руководства :

Обычно ПЗС не используется между динамическими телами. Это сделано, чтобы сохранить производительность разумная. В некоторых игровых сценариях вам нужны динамические тела использовать CCD. Например, вы можете стрелять с высокой скоростью в стек динамических кирпичей. Без ПЗС пуля может туннелировать сквозь кирпичи.

Быстро движущиеся объекты в Box2D могут быть помечены как маркеры. Пули будут выполнять ПЗС со статическими и динамическими телами. Вы должны решить какие тела должны быть пулями на основе вашего игрового дизайна. Если вы решили тело должно рассматриваться как пуля, используйте следующую настройку.

bodyDef.bullet = true;

Флаг маркера влияет только на динамические тела.

Box2D выполняет непрерывное столкновение последовательно, поэтому пули могут пропустить быстро движущиеся тела.

...