Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

21

30.03.2017, 01:47

Naja, du wirkst deine Force halt über einen kleinen Zeitraum. Wenn du die Taste kurz antippst sind das ein paar Frames. Eine Kraft wirkt über Zeit und kumuliert Energie, d.h. hier Geschwindigkeit. Sie unterscheidet sich ja nur durch die Masse von einer Beschleunigung, da die Masse hier konstant ist können wir die Kraft als Beschleunigung sehen. Ich nehme mal an das hat ungefähr folgendermaßen stattgefunden:

1. Force 850 von dir gewirkt.
2. Bisher kumulierte Geschwindigkeit durch setLinearVelocity(0,0) resettet.
3. Später im Frame berechnet die Physik-Engine die dauer des Frames und die dadurch entstande Geschwindigkeit und wendet sie an.
4. Bewegung des Objektes wird berechnet / neue Position (evtl. im gleichen Schritt wie 3, die Architektur ist mir völlig unbekannt)
5. weiter mit 1.

Da die Force nur einen Bruchteil einer Sekunde gewirkt hat, hast du eine sehr große Kraft benötigt um jeden Frame genug Geschwindigkeit aufzubauen, da sie im nächsten Frame wieder resettet wird. Dazu ist es nötig, dass die Positionsberechnung direkt nach dem Setzen der Kraft geschieht, oder dass die neue Geschwindigkeit erst nach beenden deiner Methode aus der Kraft errechnet wird, sonst hättest du nämlich keine Bewegung gehabt, da dein velocity reset auch die neue Kraft annulliert hätte.