2010-04-02 14 views
7

Estoy usando Box2d para un juego de arriba hacia abajo. El "suelo" es una serie de azulejos, donde cada azulejo es un cuerpo estático con forma de sensor. ¿Puedo hacer que la fricción tenga efecto para esto, a pesar de que los objetos realmente no están "colisionando" con el suelo?Fricción en Box2d

Si Box2d no me deja hacer esto, consideré intentar implementar el mío detectando qué fuerza está moviendo actualmente el objeto, y aplicando una fuerza opuesta a él, pero no estoy seguro de cómo detectarlo fuerza.

Respuesta

0

ApplyImpulse() en lugar de ApplyForce() funciona mucho mejor.

+3

¿Por qué 'ApplyImpulse()' funciona mejor que 'ApplyForce()'? –

6

Otra forma de hacerlo es establecer linearDamping en su cuerpo. Podrías configurar esto de manera diferente dependiendo del mosaico en el que esté tu objeto.

1

La fricción está dirigida contra la velocidad del cuerpo, independientemente de otras fuerzas.

Si configurar la amortiguación lineal no es suficiente o depender de una propiedad del b2Body es inapropiado, puede calcular fácilmente fuerzas de fricción no lineales y llamar a ApplyLinearImpulse() o ApplyLinearForce() en cada cuadro.

  • consulta la velocidad con b2Body.GetLinearVelocity(), la escala (no lineal) el resultado como se desee para conseguir la fuerza, y se invierte el signo de ambos componentes.

  • Si decide detener el cuerpo (cuando es lo suficientemente lento para pegarse), SetLinearVelocity() hace el truco sin cálculos.

Cuestiones relacionadas