我有一个游戏循环,它基本上是这样的:function game(){init();setInterval(draw, 30);}
但是当玩家获胜时我想要调用Win()
来清除间隔并重启。在javascript中解决这个问题的最佳方法是什么?由于setInterval()
是异步的,所以此时我已经从game()
中脱离出来了。所以我要添加一个繁忙的循环:function game(){while(1){init();setInterval(draw, 30);while(!Win);}}
?目前sleep()
没有好办法吗?有没有办法在game()
内调用Win()
而不制作任意大小的调用堆栈?处理这种情况的最佳方法是什么?
答案 0 :(得分:3)
您可以使用命名间隔:
var time;
function game(){
init();
time = setInterval(function (){
draw();
}, 30);
}
win(){
if(time){
clearInterval(time); // clear the interval
game(); // start the game again.
}
}
现在,只要用户赢了并开始游戏,你就必须调用这个win函数。