вместо этого вы можете добавлять и удалять прослушиватель событий по мере необходимости.
давайте предположим, что вы используете фреймворк javascript (если вы этого не сделаете, то вам, вероятно, следует учитывать количество кода JS, участвующего в такой игре)
с использованием PrototypeJS:
когда игра начнется,
document.observe("keydown",shootHandler());
при создании окна сообщения,
function createBox(text) {
...snip
document.observe("keydown",closeBox());
document.fire("game:pause");
}
и, например
var paused = false;
function shoothandler() {
if (!paused) {
alert("pew! pew!");
}
}
function closeBox() {
$('messagebox').remove();
document.fire("game:unpaused");
document.stopObserving("keydown",closeBox());
}
document.observe("game:paused", function() { paused = true;});
document.observe("game:unpaused", function() { paused = false;});
document.observe("game:over", function() { document.stopObserving("keydown",shootHandler());});
Я не включил экран рекордов, но теория та же самая.
Как видите, я также использовал пользовательские события для уведомления о состоянии паузы. Это же событие также может быть вызвано кнопкой puase в интерфейсе и т. Д.