2015-01-28 2 views
1

Я работаю над игрой, используя расширение Box2D библиотеки LibGdx, и все работает так, как должно, за исключением обнаружения столкновения.Box2D не обнаруживает столкновение

Это то, что она в настоящее время выглядит следующим образом: Image

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

Прежде всего, у меня есть несколько различных тел:

  • Player (Dynamic Кузов)
    Игроку только пострадавших от тяжести и некоторые приложенные силы (не Преобразует)
  • Ground (кинематических тело)
    земля имеет только linearVelocity (вот почему это не статический)
  • препятствия (кинематическая тела)
    препятствие перемещаются с помощью SetTransform (положение, угол) мето d
  • Despawner (Static Body)

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

Фактическая проблема заключается в том, что мой ContactListener не вызывает метод beginContact(), когда тело препятствия является частью столкновения, за исключением случаев, когда он сталкивается с телом игрока. Все другие тела сталкиваются просто отлично друг с другом.

Благодарим за помощь!

+0

Вы, скорее всего, испортили свои бит-фильтры. Укажите все соответствующие коды. Проблема заключается в 100% ** не ** с помощью метода setTransform(), так что фрагмент бесполезен (не говоря уже о запутывании для тех, у кого могут быть подобные проблемы). –

+0

Вот мои битовые фильтры: Для препятствия: '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 –

ответ

3

из руководства здесь:

http://www.box2d.org/manual.html#_Toc258082973

кинематических органы не сталкиваются с другими статическими или кинематических тел.

Вам нужно будет найти новый способ запуска депауэра. вы не сможете столкнуться между двумя кинетическими или кинетическими и статическими типами тел. возможно, корпус с сенсорным креплением. или значение позиции Y. или динамическое тело с гравитацией отключено.

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

+0

Это действительно сработало! Я использовал динамическое тело с отключенной гравитацией. Хотя, если я установил его как датчик, столкновение не срабатывает. К счастью, мне не нужно устанавливать его в качестве датчика для моего отчаявшегося человека. Большое спасибо! –

Смежные вопросы