我正在使用JavaScript并编写一个简单的游戏。我设置了一个游戏循环,并想使用箭头键与游戏进行交互。我已经定义了一个事件处理程序来处理键盘交互,并将其与游戏间隔(tick)计时器的定义一起放在主游戏循环的前面和外面:
document.addEventListener("keydown", function(event) {
var_to_modify = processKeys(event);
});
let gameTimer = window.setInterval(function() {
gameLoop();
}, gameSpeed);
function gameLoop() {
...
}
游戏循环很好地滴答答答,但问题是这样的:如何获取processKeys()函数的结果,并使用它来修改在gameLoop()函数中使用的变量?我知道这可以通过使用全局游戏状态变量,但是有没有使用全局变量的更优雅的解决方案?塔!
在游戏循环周围有一个关闭处:
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);
我也将gameLoop重命名为gameStep或gameIncrement或其他。
((代码可能是错误的,但目的是给您一个想法)