2014-11-14 55 views
0

我試圖構建一個有開始按鈕的遊戲。按下此按鈕後,遊戲開始。遊戲中有多個鍵盤按鍵事件。問題是當第n次按下開始按鈕並且遊戲開始第n次運行時,對於每個鍵盤按鍵事件,程序使n次按鍵按下。以下是代碼。JavaScript按鈕按鍵在第n次單擊事件中被觸發n次

$(document).ready(function(){ 

    $('.start_game').click(function(){ 

     $(document).keydown(function(e){ // left button 
      if (e.keyCode == 37 && game_over_flag == 0) 
      { 
       if(a!=0)  
       { 
        remove_obj(a,b); 
        a=a-1; 
        placement(a,b); 

        check_collision(a,b); 
       } 
      } 
     }); 

    }); 

}); 

所以當第二次按下開始遊戲,然後按下一次箭頭按鈕時,需要兩次點擊。對於第三次啓動遊戲按鈕點擊,每一個鍵擊都會工作三次,在單擊時,我需要單次執行.Plz幫助。

+0

我們需要查看更多的代碼來確定原因。 – PHPglue

+0

嘗試使用'.one'代替'.keydown' ... http://api.jquery.com/one/ – Frogmouth

+0

你的意思是功能? –

回答

1

每場比賽之後嘗試像

​​

您具有約束力每次用戶點擊一個新的事件處理程序。

+0

或者在點擊處理程序之外設置keydown處理程序 – levi

+0

似乎他不希望keydown在用戶按下「開始遊戲」之前處於活動狀態。 – jvanstry

2

每次點擊按鈕,它都會添加一個新的事件處理程序。所以你需要解除它。

$('.start_game').click(function() { 

    $(document).off("keydown.game").on("keydown.game", function (e) { 
    ... 

或者甚至最好不要在click事件內部綁定,使用一個標誌。

$(document).ready(function(){ 

    var isActive = false; 
    $('.start_game').click(function(){ 
     isActive = true 
    }); 

    $(document).keydown(function(e){ // left button 
     if (!isActive) { 
      return; 
     } 
     if (e.keyCode == 37 && game_over_flag == 0) 
     ... 
相關問題