了解带有数组的键代码

时间:2015-01-07 04:20:50

标签: javascript arrays key

所以我在网上发现了这个代码,它帮助我用键控制我的精灵,但我不太清楚它是如何工作的。有人可以在某种程度上向我描述数组如何处理密钥代码等。

它基本上可以使左右键和空格键起作用。

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

1 个答案:

答案 0 :(得分:1)

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