繁体   English   中英

似乎无法让setTimeout工作?

[英]Can't seem to get setTimeout to work?

var ExplodeFrame = 0;
var ExplodeTimeout;

所有这些部分都会检查玩家何时击中熔岩。 有用。 参见评论部分以致电动画

if((Player.x  > Lavas[i].x && Player.x  < (Lavas[i].x + Lavas[i].width)) || (Player.x + Player.width  > Lavas[i].x && Player.x + Player.width < (Lavas[i].x + Lavas[i].width)))
  {
    if((Player.y   > Lavas[i].y && Player.y < Lavas[i].y + Lavas[i].height) || (Player.y + Player.height > Lavas[i].y && Player.y + Player.height < Lavas[i].y + Lavas[i].height))
    {
     ExplodeTimeout = setTimeout(DrawSpawnAnimation, 200); //this part is new and might not work
     Player.jumping = false;
     Player.velY = 0;
     Player.velX = 0;
     Player.x = Player.spawnX;

     Player.y = Player.spawnY;
     Player.playerColour = Player.colour;

    }
  }


}

这种方法似乎对我不起作用?

function DrawSpawnAnimation()
{

ExplodeFrame++;
alert("current frame" + ExplodeFrame);
var explodeX = Player.x - 50;
var explodeY = Player.y - 50;

if(ExplodeFrame == 1)
{
ctxAnimation.drawImage(spriteSheet,0,2740,100,100,explodeX,explodeY,100,100);
}
else if(ExplodeFrame == 2)
{
ctxAnimation.drawImage(spriteSheet,100,2740,100,100,explodeX,explodeY,100,100);
}
else if(ExplodeFrame == 3)
{
ctxAnimation.drawImage(spriteSheet,200,2740,100,100,explodeX,explodeY,100,100);
}
else if(ExplodeFrame == 4)
{
ctxAnimation.drawImage(spriteSheet,300,2740,100,100,explodeX,explodeY,100,100);
}
else if(ExplodeFrame == 5)
{
ctxAnimation.drawImage(spriteSheet,400,2740,100,100,explodeX,explodeY,100,100);
}
else
{
ExplodeFrame = 0;
 clearTimeout(ExplodeTimeout);
  ctxAnimation.clearRect(0,0,canvasWidth,canvasHeight);
}

}

它应以每秒5帧的速度显示动画,直至结束。 那就是我想做的。

setTimeout仅触发一次函数:

http://www.w3schools.com/jsref/met_win_settimeout.asp

听起来您正在寻找的是setInterval

http://www.w3schools.com/jsref/met_win_setinterval.asp

setTimeout一次运行您的代码。 似乎您正在寻找每200毫秒运行一次的东西。 为此,请使用setInterval 它以您尝试使用setTimeout 使用setInterval ,可以通过调用clearInterval清除它

首先,将if语句替换为

ctxAnimation.drawImage(spriteSheet,(ExplodeFrame - 1) * 100,2740,100,100,explodeX,explodeY,100,100);

其次,只调用一次DrawSpawnAnimation方法。 为了真正看到动画,您应该反复调用它。 为此,请在DrawSpawnAnimation的末尾添加设置另一个超时:

function DrawSpawnAnimation()
{
    ...
    if (ExplodeFrame < 5)
    {
         setTimeout(DrawSpawnAnimation, 20);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM