Phaser Arcade.Body速度是否包括deltaTime?

时间:2016-07-10 10:34:46

标签: phaser-framework

我想以不断的速度沿着x轴移动我的角色。我认为移动取决于帧速率。所以,技术上我应该写

sprite.body.velocity.x = speed * deltaTime

其中deltaTime = game.time.elapsedMS / 1000;

但如果我这样做 - 我的角色会移动vvvvverrry slooow,即使speed = 1000

但如果我正在写

sprite.body.velocity.x = speed

它工作正常。我的fps = 60;

Phaser Documentation 表示:

  

速度 - 速度或速度变化率   身体。以每秒像素数衡量。

没有deltatime ....

并且所有演示都没有deltatime

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

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

所以,我不明白:我应该计算deltaTime还是只使用velocity.x

1 个答案:

答案 0 :(得分:0)

嗯....我觉得我很蠢......

我对deltaTime的计算错误

正确的公式将是

deltaTime = (elapsedMS * fps) / 1000

elapsedMS - 自上次更新以来的毫秒数,以毫秒为单位,基于时间。

fps - 每秒帧数。 (仅在启用advancedTiming时计算。)

所以,这是我的问题。

结果

body.velocity不包含deltaTime的计算,对于平滑移动,应使用由上述公式计算的deltaTime。

它会是那样的

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;
}