2017-09-13 67 views
1

我正在製作這個遊戲(入侵者克隆; https://codepen.io/laughingskull/pen/NaWWzE?editors=0010)。我想將船舶左右移動,當控制按下時,船將會開槍。 問題是什麼時候釋放控制,船停止移動。 我已經結合此功能KEYDOWN:如何繼續keyyd被觸發後的keydown事件

checkKey: function(e) { 
    e = e || window.event; 
    if (e.keyCode in map) { 
     map[e.keyCode] = true; 
     e.preventDefault(); 
     GAME.respond();   
    } 

和這對KEYUP:

clearKey: function(e) { 
    e = e || window.event; 
    if (e.keyCode in map) { 
     map[e.keyCode] = false; 
    }    
    if (e.keyCode === 17){ 
     GAME.respond(); 
    } 

GAME.respond()看起來像這樣:

respond: function(){ 
    console.log("map", map); 
    if (map[17]) { 
      SHIP.shoot(); 
     } 
     if (map[37]) { 
      SHIP.move(LEFT); 
      return; 
     } 
     if (map[39]) { 
      SHIP.move(RIGHT); 
      return; 
     } 
     if (map[38]) { 
      SHIP.move(UP); 
      return; 
     } 
     if (map[40]) { 
      SHIP.move(DOWN); 
      return; 
     } 
}, 

鍵按壓經由被映射地圖對象(在別處聲明)。 問題是Keyup事件觸發後,即使方向鍵仍然沒有發生。我怎樣才能恢復以下按鍵?

+0

看看Phaser.js侵略者的例子,它的實施方式應該給你一個關於如何做你的提示。 http://phaser.io/examples/v2/games/invaders – IamSilviu

回答

1

在大多數遊戲中,移動鍵都放在遊戲循環中。這意味着它會檢查每個循環的鍵盤映射,並相應地移動,並且已經將您的運動鍵作出響應。我知道的另一件事是,如果你按下一個鍵並按住它重複按鍵,直到你按下另一個鍵。這意味着它只會重複最後一次按鍵。所以如果你在循環中檢查狀態而不是基於事件的話會更好。

+0

的確,這是唯一能夠工作的東西 - 遊戲循環。現在它完美地工作。 –