![](/img/trans.png)
[英]how to pause a html5 canvas javascript animation with a keyboard input
[英]How to listen to repetitive keyboard input without pauses on JavaScript/HTML5?
我知道即使在Window
上也有这个keypress
,如果按住键就会重复,但是在重复开始之前它会有一点暂停。 我不希望这个停顿。 我正在写一个游戏,我希望玩家立即做出反应,而不是暂停。
处理基于Web的游戏的键盘事件的首选方法是什么?
听“keydown”,而不是“按键”。 Keydown不断开火直到你放手。
但:
不要只做以下事情:
window.addEventListener("keydown", function (evt) {
if (evt.keyCode === 32) { player.fire(); }
});
你最终会遇到一些人每秒射击15次,有些人每秒射击60次,甚至可能每秒射击120次。
相反,让一个Keyboard对象在n事件触发时自动更新:
var Keyboard = {
keys : {},
keyPress : function (evt) {
if (this.keys[evt.keyCode] > 0) { return; }
this.keys[evt.keyCode] = evt.timeStamp || (new Date()).getTime();
},
keyRelease : function (evt) {
this.keys[evt.keyCode] = 0;
}
};
window.addEventListener("keydown", Keyboard.keyPress.bind(Keyboard));
window.addEventListener("keyup", Keyboard.keyRelease.bind(Keyboard));
然后,在更新周期中,让角色检查Keyboard
是否有所需的键。
作为一个额外的好处,他们键有一个时间戳,它是第一次按下时,如果你想添加充电镜头,或按住按钮跳得更高。
然后你的单位应该跟踪他们被允许射击的频率,以及最后一次,在他们自己的更新区域内。
就像史蒂夫说的那样,这是不可能的。 您应该监听keydown / keyup事件并跟踪按下的按钮:
var pressedKeys = {};
$(window)
.bind("keydown", function(e) {
pressedKeys[e.keyCode] = true;
})
.bind("keyup", function(e) {
delete pressedKeys[e.keyCode];
})
;
我认为在游戏中,在某处处理所有这些事件的主循环是很常见的:
setInterval(function() {
if (pressedKeys[38]) { // if up is pressed
// do stuff
}
}, 50);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.