2014-04-20 19 views
0

我想開發一個使用canavas,html5和javascript的遊戲。我的問題是我想每300毫秒在代碼中給出後自動觸發子彈below.But取決於關鍵press.Please幫助他們,而不是被炒魷魚自動發射子彈而不是取決於按鍵?

我的遊戲代碼如下:

<!DOCTYPE html> 
<html> 
<script src="jquery.js"></script> 
<style> 
#canvas{ 
border:inset 1px black; 
} 
</style> 
<body> 
<canvas id="canvas" width=400 height=300></canvas> 

<script> 
var canvas = document.getElementById("canvas"); 
var ctx = canvas.getContext("2d"); 



var ballX = 0; 
var ballY = 270; 
var bulletY=270 
var bulletX=50; 
draw(); 
bullet(); 
function bulletFire() 
{ 
if(bulletY<0) 
{ 
    bulletY=270; 
    bullet(); 
} 
else  
bulletY-=10; 
} 

function draw() { 

    ctx.clearRect(0,0,400,300); 
    ctx.fillStyle="black" 
    ctx.beginPath(); 
    ctx.fillRect(ballX, ballY,100,30); 
    ctx.closePath(); 
    ctx.fill(); 
} 
function bullet() 
{ 
//ctx.clearRect(0,0,400,300); 
    ctx.beginPath(); 
    ctx.fillRect(bulletX, bulletY,15,30); 
    ctx.closePath(); 
} 

    // Here we just handle command keys 
    function keyDownHandler(event) { 

    // get which key the user pressed 
    var key = event.which; 

    // Let keypress handle displayable characters 
    if (key > 46) { 
    return; 
    } 

    switch (key) { 
    case 37:if(ballX!=0) 
     // left key 
      { 
     // move the ball 1 left by subtracting 1 from ballX 
     ballX -= 4; 
     bulletX -=4; 
     } 


     break; 

    case 39: 
     // right key 
      if(ballX!=300) 
     // move the ball 1 right by adding 1 to ballX 
     { 
     ballX += 4; 
     bulletX +=4; 
     } 

     break; 

    default: 
     break; 
    } 

    // redraw everything 
    draw(); 
    bullet(); 
    window.setInterval(bulletFire,300);  
} 
//draw(); 


// Listen for when the user presses a key down 
window.addEventListener("keydown", keyDownHandler, true); 
</script> 

</body> 
</html> 
+1

你有你的keyDown處理程序中的計時器。 –

回答

0

的Javascript允許您定義一個​​處理程序以及一個keyup處理程序。您通常使用這些鍵來切換哪些鍵指示當前「上」或「下」的變量。他們只設置這些變量 - 沒有別的。其被以規則的間隔執行的功能 -

此外,遊戲機制在更新函數通常實現。在Javascript中,您可以使用setInterval函數輕鬆地安排執行此功能。

在此功能,你檢查哪個鍵是目前「上下」,並執行相應的動作。此功能還應更新所有未由播放器控制的對象的位置,檢查是否有碰撞,並在對象發生碰撞時執行相互作用。