我正在使用简单的代码构建一个游戏,但却很狡猾,而且我遇到了一个问题。
我的游戏循环如下:
function loop() {
updateGame(game1, canvas1, onInit);
displayGame(game1, canvas2, onInit);
monitorPreformance(game1, canvas3, onInit);
onInit = false;
}
setInterval(loop, 20);
并且,例如,我在updateGame里面:
function updateGame(arg1, arg2, arg3) {
var a, b, c;
function doThis {
//
}
function doThat {
//
}
function draw(){
doThis();
doThat();
}
draw();
}
问题在于,每次调用setInterval时,我的变量a,b和c都会重新初始化。当游戏创建时,我在每个updateGame,drawGame和monitorPreformance中调用了setInterval三次。现在我希望能够做一些事情,比如暂停游戏,所以我想像上面那样设置它,但它会导致这些范围问题。
有一个简单的解决方法吗?我是否必须初始化一个全局对象以包含每个函数的a,b,c?请注意,大约有50个这样的变量,这需要对代码进行半重写。注意,一些变量需要在三个游戏之间传递,game1的参数也是如此。但是,其他变量只需要在每个函数的循环调用之间预先设定。
如果没有简单的解决方法,那么正确的方法是什么?
答案 0 :(得分:1)
实现这一目标的一种方法是使用模块模式:
var updateGame = (function (arg1, arg2, arg3) {
var a, b, c;
function doThis {
//
}
function doThat {
//
}
return function () {
doThis();
doThat();
}
})(game1, canvas1, onInit);
请参阅more此处
编辑: 可能你还需要修改你的循环:
function loop() {
updateGame();
displayGame(game1, canvas2, onInit);
monitorPreformance(game1, canvas3, onInit);
onInit = false;
}
setInterval(loop, 20);