Javascript代码执行暂停问题

时间:2014-03-31 11:35:37

标签: javascript html5 time html5-canvas sleep

我正在制作一个小游戏,当我遇到这个问题时,我正在制作角色死亡序列。在

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条件检查器内)在游戏循环开始之前暂停执行因为某种原因....

4 个答案:

答案 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);

请注意,在调用此方法后,其余代码将继续运行,因此请确保所有代码都驻留在函数中,以便您可以将它们用作回调。