Я пишу игру с использованием холста HTML5 и Javascript. Я использую setInterval для анимирования игры и проверки событий с регулярными интервалами. Я написал несколько уровней для игры, но я не могу убежать от setInterval, когда данный уровень заканчивается, чтобы начать следующий. Код точно обнаруживает, когда уровень выигран или потерян, и успешно очищает интервал и отображает кнопку, но кнопка не срабатывает.побег из setInterval в конце игрового уровня
Добавление кнопки было моей последней идеей. Я также попытался удалить холст с помощью jQuery и вставить новый. Я также попытался использовать clearRect на холсте, но он тоже не срабатывает.
Учитывая, что я не могу вернуть значение из setInterval, какие у меня параметры, если они есть? Есть ли другой способ сделать то же самое? Есть ли отдельная ошибка с моим кодом, который я забыл? Благодаря!
Game.prototype.win = function(int) {
clearInterval(int);
var content = "<p style='color:white;'>You win</p><br><button id='next-level'>Next Level</button></menu>"
$('#controls').append(content)
};
Game.prototype.lose = function(int) {
clearInterval(int);
var content = "<p style='color:white;'>You Lose</p><br><button id='next-level'>Start Over?</button></menu>"
$('#controls').append(content)
};
Game.prototype.run = funtion() {
$('#start').click(function() {
$('#controls').empty();
var waveOne = new window.CrystalQuest.Wave(this.X_DIM, this.Y_DIM, this, Game.WAVE_ONE)
var game = this
var int = setInterval(function() {
if (waveOne.step() === "lost") {
game.lose(int);
} else if (waveOne.step() === "won") {
game.win(int);
}
waveOne.draw(this.ctx)
}, 20)
this.bindKeyHandlers(waveOne);
}.bind(this));
$('#next-level').click(function() {
$('#controls').empty();
...more code...
});
};
Спасибо! Я попробую. – hmt
Hm. Этот метод, похоже, не делает код выполненным иначе, чем с локальной переменной.Интервал все еще останавливается, но я не могу ничего сделать за пределами интервала (нажмите кнопку и т. Д.). – hmt
@hmt - Что значит «ничего не может сделать за пределами интервала»? Я не понимаю эту часть проблемы. Если вы уничтожаете элементы DOM, на которых есть обработчики событий с кодом типа '$ ('# controls'). Empty();', то эти обработчики событий также уничтожаются. Вам придется либо привязать обработчики событий к вновь созданным элементам DOM, либо использовать делегированную обработку событий для присоединения обработчиков событий к элементам DOM более высокого уровня, которые не будут заменены. – jfriend00