作为我学习的一部分,我使用画布在javascript中构建游戏“Space Invaders”。 在游戏开始之前,主页面已加载并等待点击新游戏按钮。当我点击此按钮时,游戏开始正常运行并且完全没有问题。 (游戏运行一个递归函数,调用函数update()和render() - 查看代码-...) 问题来自于在游戏运行期间我再次按下此按钮。发生的事情是游戏运行得更快,当我点击几次游戏时跑得越来越快......
我现在不在,因为它的间隔周期本身并不清楚,或者因为run()函数再次调用自身并导致循环进入递归函数。
非常感谢。
// // ---------------------------------------- //当我按下newGame按钮时调用此函数
function startGame()
{
clearInterval(timeInterval);
run();
// run function - run the recursive function below
timeInterval = setInterval(randEnemyShots,frequencyShot);
// randEnemyShots function - choose one enemey from all enemies to shot
// frequencyShot variable - this is the frequqncy of shots
}
// ---------------------------------------- //
function run()
{
var loop=function(){
if(gameRuning)
{
update();
// update function - all the logic of game
render();
// render function - drawing the game
window.requestAnimationFrame(loop,canvas);
}
};
window.requestAnimationFrame(loop,canvas);
}
// --------------------------------------------- -------------------------------------------------- ------------------------ //
答案 0 :(得分:1)
问题在于,当您点击“开始”按钮时,您再次调用run()
功能,这有效地使游戏速度加倍。
run()
函数应该只在游戏初始化时调用一次,这样游戏循环就可以无限期地运行。
function gameInit(){
//Initialisation code here
run(); //Start the game loop only once
}
function startGame() {
//Handle 'Start' button click
clearInterval(timeInterval);
timeInterval = setInterval(randEnemyShots,frequencyShot);
}
如果设置为false,则可以使用gameRuning
值来“暂停”循环。
答案 1 :(得分:0)
最好使用setTimeout(带检查)而不是setInterval。由于setInterval的行为和成本通常很奇怪。