2016-07-10 3 views
1

Ich möchte meinen Charakter entlang der X-Achse mit konstanter Geschwindigkeit bewegen. Ich dachte, Bewegung hängt von der Bildfrequenz ab. Also, technisch sollte ichHat Phaser Arcade.Body Geschwindigkeit deltaTime oder nicht?

sprite.body.velocity.x = speed * deltaTime 

wo deltaTime = game.time.elapsedMS/1000;

schreiben Aber wenn ich das tue - mein Charakter bewegt vvvvverrry slooow, auch wenn speed = 1000.

Aber wenn ich

sprite.body.velocity.x = speed 

schreiben es funktioniert gut. Meine fps = 60;


Phaser Documentation sagt:

Geschwindigkeit - Die Geschwindigkeit, oder Änderungsrate der Geschwindigkeit von Körper. Gemessen in Pixel pro Sekunde.

kein DELTA ....

und alle Demos haben nicht DELTA

http://phaser.io/examples/v2/arcade-physics/platformer-basics

http://phaser.io/examples/v2/arcade-physics/asteroids-movement

usw.

Also, ich verstehe nicht, : soll ich deltaTime berechnen oder einfach velocity.x verwenden ?

+0

„Geschwindigkeit“ sein wird, ist nicht Verschiebung koordiniert.Die Geschwindigkeit sollte immer gleich sein, wenn Sie Objekte brauchen, um sich ohne Beschleunigung/Verzögerung gleichmäßig zu bewegen, so dass keine Neuberechnung für Delta-Zeit oder FPS erforderlich ist. – Slav

Antwort

0

Nun .... Ich denke, ich bin dumm ...

Meine Berechnung des deltaTime falsch war

Die richtige Formel

deltaTime = (elapsedMS * fps)/1000 

elapsedMS sein - Die Zeit in ms seit der letzten Aktualisierung in Millisekunden basierend auf der Zeit.

fps - Bilder pro Sekunde. (Wird nur berechnet, wenn advancedTiming aktiviert ist).

Also, das war mein Problem.


Als Ergebnis

body.velocity keine Berechnung von DELTA umfassen und für eine reibungslose Bewegung sollte DELTA verwenden, die durch die obige Formel berechnet.

Und es etwas wie die

function update() { // <-- it is phaser state method...is called every frame 
    deltaTime = (elapsedMS * fps)/1000; 
    sprite.body.velocity.x = velocityX * deltaTime; 
    sprite.body.velocity.y = velocityY * deltaTime; 
}