用数组理解关键代码

Understanding key codes with arrays

所以我在网上找到了这段代码,它可以帮助我用按键控制精灵,但我不太确定它是如何工作的。有人可以详细地向我描述数组如何在关键代码中工作吗?

它基本上让左右键和 space 条键起作用。

    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);
    }

浏览器无法告诉您某个键是否被按下。它只知道何时按下或按下某个键 。所以你必须自己跟踪密钥的状态。当一个键被按下时 (keyDownHandler),你会记得它被按下了。当按下某个键 (keyUpHandler) 时,您会记得它不是。这允许您的游戏循环对连续的按钮组合做出反应,而不是仅在按下时反应一次,或依赖自动重复触发。