Книга: Выразительный JavaScript
Пауза
Пауза
Сделайте возможным ставить и снимать игру с паузы по нажатию клавиши Esc.
Этого можно достичь, поменяв функцию runLevel
, чтобы она использовала другой обработчик событий клавиатуры, и прерывала и возобновляла анимацию по нажатию Esc.
На первый взгляд может показаться, что интерфейс runAnimation
не предназначен для этого – но если вы поменяете его вызов из runLevel
, всё получится.
Когда получится, можете попробовать ещё кое-что. Мы регистрируем события с клавиатуры не самым лучшим способом. Объект arrows
– глобальная переменная, и его обработчики событий находятся в памяти, даже если игра не запущена. Можно сказать, они утекают из системы. Расширьте trackKeys
, чтоб можно было разрегистрировать обработчики и затем поменяйте runLevel
, чтоб она регистрировала их на старте, и разрегистрировала на финише.
<link rel="stylesheet" href="css/game.css">
<body>
<script>
// Старая функция runLevel – поменяйте её...
function runLevel(level, Display, andThen) {
var display = new Display(document.body, level);
runAnimation(function(step) {
level.animate(step, arrows);
display.drawFrame(step);
if (level.isFinished()) {
display.clear();
if (andThen)
andThen(level.status);
return false;
}
});
}
runGame(GAME_LEVELS, DOMDisplay);
</script>
</body>
- 8.10. Функция nanosleep(): высокоточная пауза
- Запись звукового компакт-диска
- Глава 9 Почему вы на меня так молчите?
- Вместо заключения.
- Вырваться из-под контроля
- Листинг 8.8. (better_sleep.c) Высокоточная реализация функции sleep()
- Из искры возгорается пламя. А из телеканала – рекламная группа
- Регулярность
- Упражнения
- Конец игры
- Пример