我目前正在建立一个带有游戏的AngularJS网站。在这里,我想使用键盘来恢复/暂停和控制游戏。我必须添加eventlistener的代码如下:
$window.addEventListener('keydown', function(e) {
if ($scope.gameState.playing) {
for (var control in controls) {
if (controls.LEFT.indexOf(e.keyCode) > -1) {
gameEngine.startLeft();
} else if (controls.RIGHT.indexOf(e.keyCode) > -1) {
gameEngine.startRight();
} else if (controls.POWERJUMP.indexOf(e.keyCode) > -1) {
gameEngine.powerJump();
} else if (controls.PAUSE.indexOf(e.keyCode) > -1) {
$scope.pauseGame();
}
}
}
});
该函数的内容不是很重要,但是我的问题是,每按一次键,它就会被调用7次。
keyup
也是如此。无论快还是慢,我都按下它。var GameApp = angular.module('GameApp', []);
GameApp.controller('GameController', function($scope, $timeout, $window)
上面的代码是我如何使用$ window参数创建Angular应用程序和控制器。
我找不到解决方案。我希望任何人都知道为什么会这样。
最佳答案
大胆猜测:事件处理程序是否已注册7次?
要进行检查,例如:
$window.addEventListener('keydown', function(e) {
if(e.iAmNotAlone) {
throw new Error('Oh dear!');
}
e.iAmNotAlone = true;
/* for control in control thingy goes here */
});
您是在服务的单例部分还是某种控制器(每次都会重新创建并可以解释这种行为)中进行设置?