Я работаю над игрой, используя расширение Box2D библиотеки LibGdx, и все работает так, как должно, за исключением обнаружения столкновения.Box2D не обнаруживает столкновение
Это то, что она в настоящее время выглядит следующим образом: Image
Идея заключается игрок (маленький круг) может перейти в его пределы (сила тяжести устанавливается по направлению к центру земли), чтобы увернуться входящих препятствий, которые вращаясь вокруг земли. Как только препятствия достигнут отпавшего, ContactListener должен вызвать метод, который уничтожит тело препятствия.
Прежде всего, у меня есть несколько различных тел:
- Player (Dynamic Кузов)
Игроку только пострадавших от тяжести и некоторые приложенные силы (не Преобразует) - Ground (кинематических тело)
земля имеет только linearVelocity (вот почему это не статический) - препятствия (кинематическая тела)
препятствие перемещаются с помощью SetTransform (положение, угол) мето d - Despawner (Static Body)
Я также использую битовые фильтры для управления коллизиями (которые я тройная отмеченной и не являюсь источником проблемы).
Фактическая проблема заключается в том, что мой ContactListener не вызывает метод beginContact(), когда тело препятствия является частью столкновения, за исключением случаев, когда он сталкивается с телом игрока. Все другие тела сталкиваются просто отлично друг с другом.
Благодарим за помощь!
Вы, скорее всего, испортили свои бит-фильтры. Укажите все соответствующие коды. Проблема заключается в 100% ** не ** с помощью метода setTransform(), так что фрагмент бесполезен (не говоря уже о запутывании для тех, у кого могут быть подобные проблемы). –
Вот мои битовые фильтры: Для препятствия: 'fdef.filter.categoryBits = BIT_OBSTACLE; \t \t fdef.filter.maskBits = BIT_DESPAWNER | BIT_PLAYER; ' Для девалятора:' fdef.filter.categoryBits = BIT_DESPAWNER; \t \t fdef.filter.maskBits = BIT_OBSTACLE; ' Для игрока:' fdef.filter.categoryBits = BIT_PLAYER; \t \t fdef.filter.maskBits = BIT_GROUND | BIT_OBSTACLE; ' fdef является FixtureDef –