如何在触发 keyup 后继续 keydown 事件
How to continue keydown event after keyup was triggered
我正在制作这款游戏(入侵者克隆)。我想左右移动船,按下控制键时船会开火。
问题是什么时候释放控制,船停止移动。
我已将此功能绑定到 keydown:
checkKey: function(e) {
e = e || window.event;
if (e.keyCode in map) {
map[e.keyCode] = true;
e.preventDefault();
GAME.respond();
}
这就是键盘输入:
clearKey: function(e) {
e = e || window.event;
if (e.keyCode in map) {
map[e.keyCode] = false;
}
if (e.keyCode === 17){
GAME.respond();
}
GAME.respond() 看起来像这样:
respond: function(){
console.log("map", map);
if (map[17]) {
SHIP.shoot();
}
if (map[37]) {
SHIP.move(LEFT);
return;
}
if (map[39]) {
SHIP.move(RIGHT);
return;
}
if (map[38]) {
SHIP.move(UP);
return;
}
if (map[40]) {
SHIP.move(DOWN);
return;
}
},
按下的键通过映射对象(在别处声明)进行映射。
问题是在触发 keyup 事件之后,即使箭头键仍然按下也没有任何反应。如何恢复按下的键?
在我见过的大多数游戏中,移动键都放在游戏循环中。这意味着它会在每个循环中检查键盘映射并相应地移动,并且您已经将移动键放在响应中。我知道的另一件事是,如果你按住一个键,它会重复按键,直到你按下另一个键。这意味着它只会重复最后一次按键。因此,如果您检查循环中的状态而不是事件基础会更好。
我正在制作这款游戏(入侵者克隆)。我想左右移动船,按下控制键时船会开火。 问题是什么时候释放控制,船停止移动。 我已将此功能绑定到 keydown:
checkKey: function(e) {
e = e || window.event;
if (e.keyCode in map) {
map[e.keyCode] = true;
e.preventDefault();
GAME.respond();
}
这就是键盘输入:
clearKey: function(e) {
e = e || window.event;
if (e.keyCode in map) {
map[e.keyCode] = false;
}
if (e.keyCode === 17){
GAME.respond();
}
GAME.respond() 看起来像这样:
respond: function(){
console.log("map", map);
if (map[17]) {
SHIP.shoot();
}
if (map[37]) {
SHIP.move(LEFT);
return;
}
if (map[39]) {
SHIP.move(RIGHT);
return;
}
if (map[38]) {
SHIP.move(UP);
return;
}
if (map[40]) {
SHIP.move(DOWN);
return;
}
},
按下的键通过映射对象(在别处声明)进行映射。 问题是在触发 keyup 事件之后,即使箭头键仍然按下也没有任何反应。如何恢复按下的键?
在我见过的大多数游戏中,移动键都放在游戏循环中。这意味着它会在每个循环中检查键盘映射并相应地移动,并且您已经将移动键放在响应中。我知道的另一件事是,如果你按住一个键,它会重复按键,直到你按下另一个键。这意味着它只会重复最后一次按键。因此,如果您检查循环中的状态而不是事件基础会更好。