javascript eventlistener无法正常工作

时间:2016-09-11 15:26:36

标签: javascript

我想制作一个启动屏幕,当用户按下SPACE但我的代码不起作用时启动游戏。

var level1 = false
var keys = [];

window.addEventListener("keydown", function(e){
    keys[e.keyCode] = true;
}, false)

window.addEventListener("keyup", function(e){
    delete keys[e.keyCode];
}, false)

context.font = "bold 35px Arial";
context.fillText("Press Space to Start", 290,300);

if(keys[32]){
        level1 = true;
    }

但是当我按SPACE时,变量level1仍为false。我已经使用谷歌Chrome控制台检查了它。

2 个答案:

答案 0 :(得分:5)

  

但是当我按SPACE时,变量level1仍为false

是。为什么会是其他什么?事件处理程序中没有任何内容正在更新它。

如果要在事件发生时更新它,请在事件处理程序中更新它。

也许有一个函数可以更新你想跟踪关键状态的任何变量的状态,并从两个事件处理程序中调用它:

var level1 = false
var keys = [];

window.addEventListener("keydown", function(e) {
    keys[e.keyCode] = true;
    checkKeyState();
}, false)

window.addEventListener("keyup", function(e) {
    delete keys[e.keyCode];
    checkKeyState();
}, false)

context.font = "bold 35px Arial";
context.fillText("Press Space to Start", 290, 300);

function checkKeyState() {
    if (keys[32]) {
        level1 = true;
    } else {
        level1 = false;
    }
}

请注意,checkKeyState也可以写成:

function checkKeyState() {
    level1 = !!keys[32];
}

...但我不想在第一个代码块中向你抛出它。

答案 1 :(得分:-1)

在您提供的示例代码中,检查键[32]的if语句在触发任何事件之前运行。因此,您需要将if语句的主体移动到keydown事件函数中:

window.addEventListener("keydown", function(e){
    keys[e.keyCode] = true;
    level1 = true;
}, false);