Box2D - Персонаж прилипает к сторонам объектов

Я использую Box2D с libgdx. У меня проблема с действием столкновения по умолчанию. Когда я прыгаю или ударяюсь о верхнюю часть объекта, все работает нормально. Мой объект не прилипает. Если он попадает в вершину, он стоит на ней. Если он ударяется о дно, он падает обратно. Но если он попадает в любую из сторон, мой объект прилипает, пока я двигаюсь в этом направлении. Другими словами, гравитация не действует на него, пока он сталкивается со стороной блока/стены. Я провел некоторое исследование, но во всех решениях говорилось, что они используют b2Settings, которые я не могу использовать с libgdx. Есть ли способ исправить это? Код, который я использую для перемещения своего персонажа (движение влево), выглядит следующим образом:

level.character.body.setLinearVelocity(
                        -level.character.terminalVelocity.x,
                        level.character.body.getLinearVelocity().y);

Вот иллюстрация. Как видите, он прилипает к кирпичу, а не падает. (Мой персонаж в настоящее время монета :p)

Прилипнуть к стене


person josephoneill    schedule 13.04.2014    source источник


Ответы (1)


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

Обратите внимание, что вы все равно можете столкнуться с этой проблемой даже при использовании ApplyForce или ApplyImpulse, если сила достаточно велика и существует достаточное трение между приспособлениями (точно так же, как в реальном мире, если вы достаточно сильно прижимаете что-то к стене, а поверхности не слишком скользко, вы можете остановить его от падения).

person iforce2d    schedule 14.04.2014
comment
Спасибо! Имеет смысл. Я перепишу ввод для движения и дам вам знать, как это сработало. :) - person josephoneill; 14.04.2014