1
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);
}

}

終了するまで、1 秒あたり 5 フレームのアニメーションを表示する必要があります。それが私がやろうとしていることです。

4

3 に答える 3

1

setTimeout関数を 1 回だけ起動します。

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

あなたが探しているのは次のようですsetInterval

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

于 2013-07-04T22:16:11.870 に答える
0

setTimeoutコードを 1 回実行します。200 ミリ秒ごとに実行されるものを探しているようです。そのためには、 を使用しますsetInterval。使用しようとしている方法で機能しますsetTimeout。を使用する場合はsetInterval、呼び出してクリアしますclearInterval

于 2013-07-04T22:16:07.787 に答える
0

まず、ifステートメントを次のように置き換えます

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

次に、DrawSpawnAnimationメソッドを 1 回だけ呼び出します。アニメーションを実際に見るには、繰り返し呼び出す必要があります。の最後に別のタイムアウトの設定を追加して、それを行いますDrawSpawnAnimation

function DrawSpawnAnimation()
{
    ...
    if (ExplodeFrame < 5)
    {
         setTimeout(DrawSpawnAnimation, 20);
    }
}
于 2013-07-04T22:20:25.870 に答える