В качестве упражнения я попытался установить монстра в огне с небольшой рекурсией. Отлично работает, однако я хотел бы добавить дополнительный урон кнопкой, пока рекурсия работает. Пока все функции, устанавливающие дополнительную переменную с помощью кнопки, не работают, поскольку я не могу найти способ повлиять на переменную extra во время работы рекурсии. В основном в нижеследующем примере я хочу, чтобы кнопка нажала, чтобы сделать то, что в настоящий момент используется «if (monster === 55) ...».Манипуляция переменной в рекурсии
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
function print(text) { document.querySelector("#content").innerHTML += text + "\n"; }
</script>
<title>Monster</title>
</head>
<body>
<input type="button" id="btnPoke" value="Poke it" onclick="" />
<pre id="content"></pre>
<script type="text/javascript">
var monster = 100;
var extra = 10;
function setonfire(monster, extra) {
setTimeout(function() {
print("Monster: " + monster + ", Extra: " + extra);
if (monster > 0) {
if (monster === 55) {
monster = monster - extra;
print("Poke for an extra " + extra);
}
monster = monster - 5;
setonfire(monster, extra);
}
}, 200);
}
setonfire(monster, extra);
</script>
</body>
</html>
Надеюсь, это не слишком глупо, но я действительно в недоумении и, вероятно, застрял внутри мыслительной ошибки. Я бы хотел, чтобы какой-либо вклад подсказывал мне, где я понял, что понятия ошибочны. Мое подозрение - проблемы с охватом или рекурсия
вместо монстра == 55, имеют флаг для дополнительного урона (т.е. extraDamage = true) и проверить его в цикле. При нажатии кнопки установите extraDamage = true, когда нажимается кнопка. –
Спасибо за ответ, но с помощью этого метода я не могу заставить его работать. Я устанавливаю var extraDamage = false в начале функции setonfire, проверяется в цикле для if (extraDamage === true) и пишет функцию onClick doExtraDamage() {extraDamage = true; }. Тем не менее сам цикл во время его запуска не интересуется тем, что я делаю с помощью кнопки. Я что-то упускаю? – morph
Я нашел его. Проблема заключалась в том, что я инициализировал extraDamage внутри функции, чего я не должен был иметь. Устанавливать его вне ложных работ. Еще раз спасибо. – morph