当前,我将其设置为“ if true == true”只是为了简化,因为问题不存在。
switchBoxes(player){
if (true == true){
document.addEventListener("keypress", function switchListen(event) {
if (event.keyCode == 101) {
console.log("TrapActivated");
}
}, {once:true});
}
}
我的游戏中出现了一个问题,该问题是我在javascript中制作的,当我只按一次“ E”键时,在控制台中会多次看到“ TrapActivated”。 switchBoxes是一个名为碰撞对象的类中的函数。它的目的是创建一个盒子,当您按下“ E”键时,它可以充当开关并影响我创建的地图的其他部分。玩家可以在画布上自由移动地图。我没有碰撞检测,而是让玩家查看他是否在触摸开关,而不是“ if true == true”。参数“玩家”是这样,您可以选择谁可以使用该开关。当我按“ E”时,控制台会向我发送大约34到500条消息。在我按下“ E”键后不久,它就停止了,大约在100-200毫秒后。而且我还没有对帧率做任何事情,因此它应该是默认值。
这是我在本网站上遇到的第一个问题,所以请原谅我。
答案 0 :(得分:0)
首先,使用event.key
而不是event.keyCode
;
第二个-您的switchBoxes()
函数在每次调用时创建新的侦听器;
因此,这是绝对正确的行为。为避免这种情况,您可以尝试使用removeEventListener
。但是,我认为,在这种情况下,最好的方法是在父范围中声明switchListen
。像这样:
function switchListen(event) {
if (event.key === 'e') {
console.log("TrapActivated");
}
}
function switchBoxes(player){
if (true == true){
document.addEventListener('keypress', switchListen, {once:true});
}
}
因此,您将创建唯一的一个侦听器,由于once:true
,该侦听器将在第一次调用时删除;