Javascript setTimeout只运行一次

Javascript setTimeout只运行一次,javascript,html,animation,canvas,html5-canvas,Javascript,Html,Animation,Canvas,Html5 Canvas,我试图给claterect函数添加一个延迟,我的目标是让动画精灵创建一个“拖尾效果”,但是setTimeout函数仅在画布动画开始时运行一次。 我错过了什么明显的东西吗 var draw = function() { // draw loop setTimeout(function() { // this runs once ctx.clearRect(0, 0, 700, 560); }, 2000); ctx.drawImage(sprites.b

我试图给
claterect
函数添加一个延迟,我的目标是让动画精灵创建一个“拖尾效果”,但是
setTimeout
函数仅在画布动画开始时运行一次。 我错过了什么明显的东西吗

var draw = function() { // draw loop 
    setTimeout(function() { // this runs once
        ctx.clearRect(0, 0, 700, 560);
    }, 2000);

    ctx.drawImage(sprites.background, bkg.x, bkg.y);
    aliens.forEach(function(element, index) {
        ctx.drawImage(sprites.enemy, element.clipX, element.clipY, element.w, element.h, element.x, element.y, element.w, element.h);
    });
};

设置计时器,该计时器在计时器过期后执行一次函数或指定的代码段

你想要:

重复调用函数或执行代码段,每次调用之间有固定的时间延迟。返回一个有效期

设置计时器,该计时器在计时器过期后执行一次函数或指定的代码段

你想要:

重复调用函数或执行代码段,每次调用之间有固定的时间延迟。返回一个有效期


谢谢,我还尝试了setInterval(function(){ctx.clearRect(0,0700560);},2000);这里运气不好,我也尝试了setInterval(function(){ctx.clearRect(0,0700560);},2000);这里没有运气。顺便说一句,如果您只想提供参数,您不需要严格地将传递给
setTimeout
的函数包装在匿名函数中:如果您使用两个以上的参数调用
setTimeout/setInterval
,所有额外的参数都会像下面这样传递给您的函数
setTimeout(警告,1000,“你好”)
。不过,一定要小心
这个
上下文,因为它可能会被更改。要创建一个尾随FX,不要在每个主循环的开头清除画布。使用ctx.globalAlpha<1绘制背景图像,这将产生留下痕迹的效果。这将适用于alpha值>0.05,但较低(和较长的轨迹)值将添加瑕疵。如果您想要更长的轨迹,您可以每隔一帧或更多帧绘制背景。作为补充说明,如果您只想提供参数,则不需要严格地将传递给
setTimeout
的函数包装在匿名函数中:如果您使用两个以上的参数调用
setTimeout/setInterval
,所有额外的内容都会像下面这样传递给您的函数
setTimeout(警报,1000,“hello”)
。不过,一定要小心
这个
上下文,因为它可能会被更改。要创建一个尾随FX,不要在每个主循环的开头清除画布。使用ctx.globalAlpha<1绘制背景图像,这将产生留下痕迹的效果。这将适用于alpha值>0.05,但较低(和较长的轨迹)值将添加瑕疵。如果想要更长的轨迹,可以每隔一帧或更多帧绘制背景。