2010-04-02 7 views
7

Sto usando Box2d per un gioco di topdown. Il "terreno" è una serie di tessere, in cui ogni tessera è un corpo statico con una forma di sensore. Posso fare in modo che l'attrito abbia effetto per questo, anche se gli oggetti non sono realmente "in collisione" con il terreno?Friction in Box2d

Se Box2d non mi consente di farlo, ho considerato di provare a implementare il mio rilevando quale forza sta attualmente spostando l'oggetto e applicando una forza opposta ad esso, ma non sono abbastanza sicuro di come rilevarlo vigore.

risposta

0

ApplyImpulse() anziché ApplyForce() funziona molto meglio.

+3

Perché "ApplyImpulse()" funziona meglio di "ApplyForce()"? –

6

Un altro modo per farlo è impostare linearDamping sul tuo corpo. È possibile impostarlo in modo diverso a seconda della piastrella su cui si trova l'oggetto.

1

L'attrito è diretto contro la velocità del corpo, indipendentemente dalle altre forze.

Se l'impostazione dello smorzamento lineare non è sufficiente o se si fa affidamento su una proprietà di b2Body non è appropriato, è possibile calcolare facilmente forze di attrito non lineari e chiamare ApplyLinearImpulse() o ApplyLinearForce() ogni frame.

  • Query la velocità con b2Body.GetLinearVelocity(), scala (non lineare) il risultato come desiderato per ottenere la forza, e invertire il segno di entrambi i componenti.

  • Se si decide di arrestare il corpo (quando è abbastanza lento da rimanere attaccato), SetLinearVelocity() esegue il trucco senza calcoli.