如何使用附加的keymaster.js侦听器终止JS对象

时间:2015-03-11 02:09:43

标签: javascript zombie-process

我遇到一个问题,我的JavaScript程序中有一个幻影game对象,它仍然附加到我的键盘输入处理程序(keymaster.js)。

在下面的代码中,我首次加载页面时在演示模式下运行startGame,以便在用户阅读启动画面时显示模拟游戏。

然后当用户按下“开始”按钮时,我重新运行startGame。然而,此时,每当用户按下击键时,就会发射两个子弹而不是一个。我发现有两个单独的“游戏”对象响应击键,每个对象都发射一颗子弹。

如何在游戏之间完全重置游戏状态并杀死内存中的所有相关对象?

var startGame = function(demoMode) {
    this.game = new TypingFrenzy.Game({
        "ctx": ctx,
        "ctx_kbd": ctx_kbd,
        "demoMode": demoMode
    });

    this.currentGameView = new TypingFrenzy.GameView(this.game, ctx);
    this.currentGameView.start();
}

startGame(true)

以下是我绑定事件处理程序的代码,以回应微薄的评论:

GameView.prototype.bindKeyHandlers = function () {
 var ship = this.ship;

 for (i = 33; i <= 64; i++) {
  var chr = String.fromCharCode(i);
  key(chr, function (event, handler) { ship.processKeystroke(event, handler)   });
}
};

从我的game对象解除绑定我的关键侦听器允许删除我的game对象。我使用了以下命令:

key.unbind('a');

非常感谢!

1 个答案:

答案 0 :(得分:0)

这解决了这个问题。请参阅我对原始问题的编辑。

key.unbind('a');