我想以不断的速度沿着x轴移动我的角色。我认为移动取决于帧速率。所以,技术上我应该写
sprite.body.velocity.x = speed * deltaTime
其中deltaTime = game.time.elapsedMS / 1000;
但如果我这样做 - 我的角色会移动vvvvverrry slooow,即使speed = 1000
。
但如果我正在写
sprite.body.velocity.x = speed
它工作正常。我的fps = 60;
速度 - 速度或速度变化率 身体。以每秒像素数衡量。
没有deltatime ....
并且所有演示都没有deltatime
http://phaser.io/examples/v2/arcade-physics/platformer-basics
http://phaser.io/examples/v2/arcade-physics/asteroids-movement
等
所以,我不明白:我应该计算deltaTime还是只使用velocity.x
?
答案 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;
}