我正在嘗試使用箭頭鍵移動精靈。如果按下兩個鍵,下面是應該使精靈沿對角線移動的邏輯。但是,情況並非如此。它只會一次向一個方向移動。由於我每次按下按鈕時都將每個keyCode都保存爲對象屬性中的布爾值,因此我認爲這不應該是一個問題,但我無法使其工作。我也嘗試使用數組來存儲這些布爾值,然後檢查這些值。沒有運氣。如果同時按下兩個移動鍵,將精靈的方向改爲對角線
我在我的智慧結束,將不勝感激一些幫助。我已經在構建2D遊戲上搜颳了stackoverflow和許多不同的博客,但是我沒有嘗試過。
var keyState = {};
window.onkeydown = window.onkeyup = function(e) {
keyState[e.keyCode] = e.type == 'keydown';
// checks for up and left
if (keyState[38] && keyState[37]) {
player.pos.x -= 2;
player.pos.y -= 2;
}
// checks for up and right
else if (keyState[38] && keyState[39]) {
player.pos.x += 2;
player.pos.y += 2;
}
// checks for down and left
else if (keyState[40] && keyState [37]) {
player.pos.x -= 2;
player.pos.y -= 2;
}
// checks for down and right
else if(keyState[40] && keyState [39]) {
player.pos.x += 2;
player.pos.y -= 2;
}
// checks for up
else if (keyState[38]) {
player.animation.y = 64;
player.pos.y -= 2;
}
};
好的角度。但在我的情況下,我需要檢查組合。這是因爲我需要改變每個方向被按下時精靈片的哪一部分被使用。但是,如果我只使用四個不同的方向,這將很好。我可能只需添加一個if語句來檢查是否同時按下多個keystate的倒數,然後使用一個else塊來運行你寫的內容。 – Streamer
@Azurasky我通常會將箭頭鍵映射到單個值設置,將位0-3設置爲映射向上,向下,向左,向右。然後,我可以檢查16個可能的組合中的一個,或者只是屏蔽一下,看看是否按下了鍵。例如,向上位0設置'keyMap | = 1'來清除'keyMap&= 0b1110',如果我想測試UP,LEFT(位0,2)'if(keyMap === 0b0101){'或if keyMap === 5)'(0b是二進制數前綴,0x是十六進制前綴,方便用於位域) – Blindman67
哦,這個東西很難消化。我正在看一些關於位域的文檔(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators),剛纔瞭解到調用.toString(2 )在一個數字上返回它的二進制表示。編輯完成後,你的答案從好到好!我在學習這麼多東西。 – Streamer