在JavaScript EventListener中处理用户按住键

时间:2017-05-30 02:53:20

标签: javascript

所以我正在制作一个简单的javascript游戏,我正在使用空格键来拍摄导弹。

这是我遇到问题的地方:

        document.addEventListener("keydown", keyDownHandler, false);
        document.addEventListener("keyup", keyUpHandler, false);

        function keyDownHandler(e){
            if(e.keyCode == 39){
                rightPressed = true;
            }
            else if(e.keyCode == 37){
                leftPressed =true;
            }
            else if(e.keyCode == 32){  //Keycode for space bar
                missleFired = true;
            }
        }

        function keyUpHandler(e){
            if(e.keyCode == 39){
                rightPressed = false;
            }
            else if(e.keyCode == 37){
                leftPressed = false;
            }
        }

在我的keyDownHandler中,我用它来捕捉用户左右移动宇宙飞船,或者当用户按空格键进行射击时。问题是,我只希望将“missleFired”变量设置为true,最初是在按下栏时。现在的方式是,用户可以按住空格键并射击大量的导弹,但我想从空格键按下直到它被释放时只拍摄一个导弹。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

我这样做了:missileFired块依赖于数组中的项目为字符串'one',以便进一步处理。使用oneTime.shift(),它删除数组中的项并将其变异

const oneTime = ['one'];

function keyDownHandler(e){
    if(e.keyCode == 39){
        rightPressed = true;
    }
    else if(e.keyCode == 37){
        leftPressed =true;
    }
    else if(e.keyCode == 32){  //Keycode for space bar
      if (e.keyCode == 32 && oneTime[0] !== 'one) {
        oneTime.shift(); // will remove the string 'one' out of the array for good. this code will not execute again
        missleFired = true;
      }
    }
}

答案 1 :(得分:0)

我明白了:

        var keys = [];
        document.addEventListener("keydown", keyDownHandler, false);
        document.addEventListener("keyup", keyUpHandler, false);

        function keyDownHandler(e){
            if(e.keyCode == 39){
                rightPressed = true;
            }
            else if(e.keyCode == 37){
                leftPressed =true;
            }
            else if(e.keyCode == 32){
                if(keys[e.keyCode]){
                    missleFired = false;
                }
                else{
                    missleFired = true;
                    keys[e.keyCode] = true;
                }
            }
        }

        function keyUpHandler(e){
            if(e.keyCode == 39){
                rightPressed = false;
            }
            else if(e.keyCode == 37){
                leftPressed =false;
            }
            else if(e.keyCode == 32){
                keys[e.keyCode] = false;
            }
        }

我创建了一个单独的数组来保存是否按下某些键并且有一个布尔属性我可以在调用keyDownHandler时检查。