更改更新速度而不改变循环速度?

时间:2013-08-07 19:16:06

标签: javascript canvas

有人可以解释我如何更改我的英雄动画而不更改setTimeout。我的意思是如何使英雄动画比所有画布慢。通过动画我的意思是改变帧

function draw() {
if (hero.ready){
    ctx.clearRect (0 , 0, 500 , 500 );
    ctx.shadowColor = "rgba( 0, 0, 0, 0.1 )";
    ctx.shadowOffsetX = 15;
    ctx.shadowOffsetY = -10;
    ctx.drawImage(image[hero.image],hero.frames * hero.sizeX, 0, hero.sizeX, hero.sizeY, hero.posX, hero.posY, hero.sizeX, hero.sizeY);
}
hero.frames++;
if (hero.frames >= 2) hero.frames = 0;
setTimeout( draw, 1000 / 5 );
}

JSFIDDLE完整示例。

1 个答案:

答案 0 :(得分:1)

为了澄清“增量时间”的概念,如果你只是简单地增加一个计数器而不是实时缩放它,那么它会随着调用draw而增加。但是,通过缩放它,您可以保证每秒有一定数量的帧。这样,您始终可以确保动画的速度与您想要的一样慢或快。您可以将阈值设置为例如500毫秒(每半秒一帧),依此类推。

var counter = 0;
function draw() {
  // deltaTime is how you plan on counting real seconds
  // against your frame ticks
  counter += deltaTime;

...

// threshold would be your delay
if (counter >= threshold)
{
  hero.frames++;
  if (hero.frames >= 2) hero.frames = 0;
  counter = 0;
}

}

setInterval( draw, 1000 / 5 );