2013-07-04 133 views
1
var ExplodeFrame = 0; 
var ExplodeTimeout; 

所有這一部分都會檢查玩家是否遇到熔岩。有用。請參閱評論部分致電動畫似乎無法使setTimeout正常工作?

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幀的第二動畫直到其結束。這就是我想要做的。

+0

DrawSpawnAnimation中的警報是否觸發? – Anthony

+0

我不能推薦更多,學習使用適當的調試器。它允許您在執行代碼時逐行瀏覽代碼,並確切瞭解發生了什麼。關於調試的Google Chrome開發人員工具:https://developers.google.com/chrome-developer-tools/docs/javascript-debugging –

+0

我建議您還要學習如何「接受」人們的答案(點擊勾號大綱)你已經提出了6個問題,並且都沒有接受。 – Jarrod

回答

0

setTimeout運行您的代碼一次。看來你正在尋找每200毫秒運行一次的東西。爲此,請使用setInterval。它以您嘗試使用setTimeout的方式工作。當您使用setInterval,您可以通過調用clearInterval

1

setTimeout清除它只是觸發一個函數一次:

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

這聽起來像你要找的是什麼setInterval

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

+0

請不要發佈w3schools的東西,想知道爲什麼?閱讀本文:http://www.w3fools.com/ – intuitivepixel

+0

我已將它設置爲間隔,仍然沒有! – Sam

+0

@intuitivepixel Ha !! w3schools對這個簡單的東西並不是那麼糟糕。但是w3fools確實是一個很好的觀點。不會再做。 – nicholas

0

首先,用

替換if語句
ctxAnimation.drawImage(spriteSheet,(ExplodeFrame - 1) * 100,2740,100,100,explodeX,explodeY,100,100); 

其次,您只調用DrawSpawnAnimation方法一次。爲了實際看到動畫,你應該多次調用它。這樣做是通過在DrawSpawnAnimation的末尾添加另一個超時設置來實現的:

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