физический движок с несколькими группами объектов - PullRequest
0 голосов
/ 06 мая 2018

Моему java-приложению требуется физический движок 2d для горизонтального мира, однако, глядя на jbox2d и dyn4j, кажется, что они не предлагают то, что мне нужно, из коробки. В частности, они не поддерживают определение, какие группы объектов могут сталкиваться с другими. Рассмотрим эту упрощенную модель: пули могут сталкиваться с коробками. Самолеты проходят через ящики, но могут сталкиваться с пулями.

Как исключить столкновение определенных групп объектов в физическом движке?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Dyn4j имеет CategoryFilter . Вы создаете CategoryFilters с двумя значениями long и устанавливаете их в своих приборах. Немного забавно, как работают фильтры, потому что категория и маска используются в их двоичных формах, чтобы определить, кто может столкнуться с кем. Чтобы увидеть это на практике, посмотрите это @ Test из репозитория Dyn4j. Dyn4j также упоминает об этом в документах :

Предусмотрено три реализации фильтра: Filter.DEFAULT_FILTER, CategoryFilter (точно так же, как фильтр столкновений Box2D, int category + mask) и TypeFilter.

Так что я предполагаю, что Box2D имеет это тоже (и jBox2d по расширению). Я бы сказал, что любой физический движок на уровне Box2D или Dyn4j будет иметь эту способность в той или иной форме.

0 голосов
/ 07 мая 2018

В box2d есть решение (и jbox2d соответственно). Метод «PreSolve» позволяет отключить контакт перед столкновением. См. этот вопрос по gamedev , который имеет почти такую ​​же проблему, как описано здесь.

Из документации:

Событие с предварительным разрешением

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

...