Трение в Box2D в

Я использую Box2d для игры сверху вниз. "Земля" представляет собой серию плиток, где каждая плитка представляет собой статическое тело с формой датчика. Могу ли я заставить трение вступить в силу для этого, даже если объекты на самом деле не "сталкиваются" с землей?

Если Box2d не позволит мне это сделать, я подумал о попытке реализовать свой собственный, обнаружив, какая сила в настоящее время перемещает объект и применяет силу, противоположную ему, но я не совсем уверен, как обнаружить эту силу.

3 ответов


другой способ сделать это, чтобы установить linearDamping на ваше тело. Можно установить по-разному в зависимости от плитки на ваш объект.


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

Если установка линейного демпфирования недостаточно или полагаться на свойство b2Body неуместно, вы можете легко вычислить нелинейные силы трения и вызвать ApplyLinearImpulse() или ApplyLinearForce() каждый кадр.

  • запрос скорости с b2Body.GetLinearVelocity (), масштабировать (нелинейно) результат по желанию, чтобы получить силу и инвертировать знак обоих комплектующие.

  • Если вы решите остановить тело (когда оно достаточно медленно, чтобы придерживаться), SetLinearVelocity () делает трюк без вычислений.


ApplyImpulse() вместо ApplyForce() работает намного лучше.