Обработка взаимодействия с клавиатурой в игре l oop - javascript - PullRequest
2 голосов
/ 29 марта 2020

Я играю с javascript и пишу простую игру. У меня настроена игра l oop и я хочу использовать клавиши со стрелками для взаимодействия с игрой. Я определил обработчик событий для управления взаимодействием с клавиатурой и поместил его перед и за пределами основной игры l oop вместе с определением таймера игрового интервала (тика):

document.addEventListener("keydown", function(event) {
    var_to_modify = processKeys(event);
});

let gameTimer = window.setInterval(function() {
    gameLoop();
}, gameSpeed);

function gameLoop() {
    ...
}

Игра l oop прекрасно работает, но проблема в следующем: как я могу взять результат функции processKeys () и использовать его для изменения переменной, которая используется внутри функции gameL oop ()? Я знаю, что это может быть достигнуто с помощью глобальной, например, переменной состояния игры, но есть ли более элегантное решение без использования глобальной переменной? Та!

1 Ответ

2 голосов
/ 29 марта 2020

закрыто вокруг игры l oop:

function generateGameLoop() {
let param = 0; //or any default value
let setParam = function (newParam) { 
param = newParam;
//here add any logic to respond to event
};
let gameLoop = function() {
    ...
}
return {setParam, gameLoop};
}

let setParam, gameLoop = generateGameLoop();

document.addEventListener("keydown", function(event) {
    setParam(processKeys(event));
});

let gameTimer = window.setInterval(function() {
    gameLoop();
}, gameSpeed);

Я бы также переименовал gameL oop в gameStep или gameIncrement или что-то в этом роде.

(код может быть неправильным, но цель - дать вам представление)

...