Я делаю игру со змеями, и в ней есть настройка для изменения скорости. Когда я меняю скорость, она работает до тех пор, пока вы не наберете ie, а затем изменится на что-то другое.
jsFiddle, полноэкранная игра
код
Код, который я считаю уместным:
//sleep function
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
//speed selectors
$('.speedSel').click(function() {
var id = $(this).attr('id');
if (id == 'slow') {
moveTimer = 85;
} else if (id == 'med') {
moveTimer = 75;
} else if (id == 'fast') {
moveTimer = 65;
} else if (id == 'veryfast') {
moveTimer = 55;
} else if (id == 'crazy') {
moveTimer = 35;
} else if (id == 'nm') {
moveTimer = 25;
}
console.log(id);
console.log(moveTimer);
});
//Initialize, run every time you restart the game
function init() {
snake = [{
x: canv.width / 2,
y: canv.height / 2
}];
for (var i = 0; i < startLength - 1; i++) {
snake.push({
x: snake[i].x + snakeSegWidth,
y: snake[i].y
});
}
//Run gameloop
game();
}
//Gameloop, waits var moveTimer milliseconds(ms) then moves
async function game() {
snake = [{
x: canv.width / 2,
y: canv.height / 2
}];
for (var i = 0; i < startLength - 1; i++) {
snake.push({
x: snake[i].x + snakeSegWidth,
y: snake[i].y + snakeSegWidth
});
}
placeApple();
gameOver = false;
paused = false;
$("#gamedone").hide();
while (gameOver == false) {
//Sleep function
await sleep(moveTimer);
if (paused == false) {
move();
}
}
snake.forEach(clearSnakePart);
gameIsOver();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<fieldset>
<legend>Select a Speed</legend>
<input class='speedSel' type="radio" name="radio" id="slow">
<label class='speedSel' for="slow">Slow</label>
<input class='speedSel' type="radio" name="radio" id="med">
<label class='speedSel' for="med">Medium (Default)</label>
<br>
<input class='speedSel' type="radio" name="radio" id="fast">
<label class='speedSel' for="fast">Fast</label>
<input class='speedSel' type="radio" name="radio" id="nm">
<label for="nm">Nightmare</label>
</fieldset>
Извините, что так много, но я действительно понятия не имею, что происходит не так. Проблема в том, что умирание меняет время ожидания таймера сна, но не меняет переменную moveTimer
.