我想制作一个启动屏幕,当用户按下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控制台检查了它。
答案 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);