Быстро движущиеся тела иногда пропускают столкновение в Box2d, Andengine

StackOverflow https://stackoverflow.com/questions/8307837

  •  25-10-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

От Box2d Manual:

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

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

bodydef.bullet = true;

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top