我正在制作一个小游戏,当我遇到这个问题时,我正在制作角色死亡序列。在
eloop(setInterval(e_seq,100)
播放结束序列。在那之后,我希望执行在显示分数和内容之前停止一秒钟。 但是我使用的当前睡眠方法暂停整个执行,包括循环,而我希望在暂停游戏一秒钟之前完成循环。
叫睡觉的地方:(在主游戏圈内)
eloop=setInterval(e_seq,100);
sleep(1000);
睡眠方法:
function sleep(msec)
{
var time= new Date().getTime();
while(time+msec>= new Date().getTime())
{}
}
任何解决方案?
PS:在游戏循环结束时调用睡眠(在if条件检查器内)在游戏循环开始之前暂停执行因为某种原因....
答案 0 :(得分:1)
我想你可能想要更多的内容
setTimeout(function () { e_seq(); }, 1000);
这会等待一秒然后执行e_seq()函数,我认为这是你的代码的目的,虽然它可以解释一下......
答案 1 :(得分:0)
您是否尝试过setInterval?
setInterval(function(){ ... }, 3000);
答案 2 :(得分:0)
我尝试了一些东西
var looper;
var looptime = 2000;
var doloop = function(){
console.log("doing this")
}
function begin(callthis){
looper = setInterval(callthis,looptime);
}
function pause(callthis,sleeptime){
clearInterval(looper);
setTimeout(function(){
looper = setInterval(callthis,looptime);
},sleeptime)
}
使用like:
begin(doloop);
并暂停
pause(doloop,10000);
答案 3 :(得分:0)
使用“睡眠”功能时需要回调。 JavaScript中不存在睡眠概念。
你不应该像使用忙碌循环一样,因为这会阻碍任何其他进程以及JavaScript是单线程的(包括DOM更新)。使用计时器,但由于计时器是异步的,您将不得不使用上面提到的回调。
这不是那么复杂 -
像这样修改sleep方法:
function sleep(timeout, callback) {
setTimout(callback, timeout); // or just call this directly...
}
(你可以看到包装器有点多余,所以我建议你直接调用setTimeout()
。)
现在,您可以将分数屏幕实现为功能:
function showScores() {
...
}
然后,如果您想在显示分数屏幕之前延迟一秒,请执行以下操作:
sleep(1000, showScores);
或简单地说:
setTimeout(showScores, 1000);
请注意,在调用此方法后,其余代码将继续运行,因此请确保所有代码都驻留在函数中,以便您可以将它们用作回调。