有人可以解释我如何更改我的英雄动画而不更改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完整示例。
答案 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 );