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

标签 javascript canvas

有人可以解释一下如何在不更改 setTimeout 的情况下更改我的英雄动画吗?我的意思是如何使英雄动画比所有 Canvas 慢。我所说的动画是指改变帧

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完整示例。

最佳答案

为了澄清“增量时间”的概念,如果您只是简单地增加计数器而不根据实际时间进行缩放,那么它的增加速度将与调用 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 );

关于javascript - 改变更新速度而不改变循环速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18111909/

相关文章:

Javascript 更改 marginTop 属性在 Firefox for XHTML 1.0 Transitional 中不起作用

javascript - 如何为 jquery 旋钮做 jquery Canvas 渐变?

javascript - KineticJS:如何裁剪图像?

javascript - Canvas 宽度在缩放时延伸到页面之外

javascript - 在没有堆栈溢出的情况下在javascript中做无限动画的模式

javascript - 将文本包裹在矩形内而不溢出它,fiddle canvas html5

javascript - 如何使用 IndexedDB objectStore 中的值自动填充选择框?

javascript - 如果 javascript 或 jQuery 中的模式匹配,如何附加反斜杠

javascript - 在 .php 页面的脚本中初始化一个变量,而不是在 .js 文件中获取它

javascript - 使用rxjs实现指数补偿