所以我在网上发现了这个代码,它帮助我用键控制我的精灵,但我不太清楚它是如何工作的。有人可以在某种程度上向我描述数组如何处理密钥代码等。
它基本上可以使左右键和空格键起作用。
var keys = [];
//This is part of a class
this.listenInput = function() {
if (keys[37]) {
this.x -= speed;
}
if (keys[39]) {
this.x += speed;
}
};
function setupKeys() {
var listenedKeys = [32, 37, 38, 39, 40];
function keyUpHandler(event) {
var keyCode = event.keyCode;
if (listenedKeys.indexOf(keyCode) === -1) return;
keys[keyCode] = false;
}
function keyDownHandler(event) {
var keyCode = event.keyCode;
if (listenedKeys.indexOf(keyCode) === -1) return;
keys[keyCode] = true;
if (keyCode === 32) {
spaceBarPressed = true;
}
event.preventDefault();
}
//Event listeners for keys
window.addEventListener("keydown", keyDownHandler, false);
window.addEventListener("keyup", keyUpHandler, false);
}
答案 0 :(得分:1)
浏览器无法告诉您是否按下了某个键。它只知道按下按下按下或按下的键。因此,您必须自己跟踪密钥的状态。按下某个键(keyDownHandler
)时,您会记住它已被按下。当按下一个键(keyUpHandler
)时,你会记住它不是。这允许你的游戏循环对连续按钮混搭做出反应,而不是仅在按下时做出反应,或者依靠自动重复来触发。