我有一個側面滾動太空船遊戲,我一直在試圖找到一種方法來有效地處理玩家移動。這一直是我的代碼,到目前爲止,我已經從源複製:如何在帆布遊戲中更好地處理玩家動作?
window.addEventListener("keydown", keyDown);
window.addEventListener("keyup", keyUp);
setInterval(move, 33.3);
keys = {};
function keyDown(event){
keys[event.keyCode] = true;
}
function keyUp(event){
delete keys[event.keyCode];
}
function move(){
if (65 in keys && player.x > 0)
player.x -=5;
if (68 in keys && player.x < 576)
player.x +=5;
if (87 in keys && player.y > 0)
player.y -= 5;
if (83 in keys && player.y < 576)
player.y += 5;
}
問題:
- 爲什麼我需要設置
keys[event.keyCode]
爲真正?這種說法有什麼作用? - 是否
delete keys[event.keyCode]
只是刪除鍵對象中包含該keyCode的任何屬性? - 什麼是更好的方式來實現球員運動?
所以只是要確定的技術,按鍵對象永遠只有一個一個屬性與(比如說65)鍵碼吧? – PixelProgrammer
@PixelProgrammer不一定。如果用戶同時按下兩個鍵,那麼'keys'將具有兩個屬性;每個鍵一個。這是爲什麼這是一個好的解決方案的另一個原因。它允許您一次輕鬆處理多個按鈕。 –
當然,但它只有一個keyCode屬性。所以,一個屬性與65,一個與68.我問的原因是因爲如果我要使用數組,這將意味着該數組可能會保存多個keyCodes,我想確保與情況不是對象。 – PixelProgrammer