2010-04-02 6 views
7

Ich benutze Box2d für ein Topdown-Spiel. Der "Boden" ist eine Reihe von Kacheln, wobei jede Kachel ein statischer Körper mit einer Sensorform ist. Kann ich dafür Reibung bewirken, obwohl die Objekte nicht wirklich mit dem Boden "kollidieren"?Reibung in Box2d

Wenn Box2d mich das nicht tun lässt, überlegte ich, ob ich versuchen sollte, meine eigene zu implementieren, indem ich erfasste, welche Kraft gerade das Objekt bewegt und eine entgegengesetzte Kraft anwendete, aber ich bin mir nicht sicher Macht.

Antwort

0

ApplyImpulse() statt ApplyForce() funktioniert viel besser.

+3

Warum funktioniert 'ApplyImpulse()' besser als 'ApplyForce()'? –

6

Eine andere Möglichkeit dies zu tun, ist linearDamping auf Ihrem Körper zu setzen. Sie können dies abhängig von der Kachel, auf der sich Ihr Objekt befindet, anders einstellen.

1

Die Reibung ist unabhängig von anderen Kräften gegen die Geschwindigkeit des Körpers gerichtet.

Wenn die Einstellung der linearen Dämpfung nicht ausreicht oder eine Eigenschaft des b2Body nicht geeignet ist, können Sie problemlos nichtlineare Reibungskräfte berechnen und ApplyLinearImpulse() oder ApplyLinearForce() für jeden Frame aufrufen.

  • Abfrage der Geschwindigkeit, mit b2Body.GetLinearVelocity(), Waage (nicht-linear) das Ergebnis als die Kraft zu erhalten gewünscht wird, und das Vorzeichen der beiden Komponenten invertieren.

  • Wenn Sie sich entscheiden, den Körper zu stoppen (wenn es langsam genug ist, um zu haften), macht SetLinearVelocity() den Trick ohne Berechnungen.