setTimeout难度大

时间:2014-04-17 01:33:51

标签: javascript settimeout

我正在开发一个小小的JavaScript游戏,我遇到了最奇怪的错误。这是我用来处理玩家死亡的代码(在游戏中):

function death(){
    reset();
    clearInterval(loop);
    canvas.level = 1;

    ctx.fillStyle = "rgba(0,0,0,0.75)";
    ctx.fillRect(0, 0, 800, 400);

    ctx.fillStyle = "#FFFFFF";
    ctx.font = "bold 22px Times New Roman, sans-serif ";
    ctx.fillText("YOU GOT DEAD", canvas.width/2 - 70, canvas.height/2);
    ctx.font = "16px helvetica, sans-serif ";
    ctx.fillText("Game will Restart in 7 Seconds", canvas.width/2 - 100, canvas.height/2 + 30);
    //VVV HERE'S THE PROBLEM VVV
    window.setTimeout(function(){start_game();}, 7000);
}

当我使用Document.setTimeout()时,游戏会重置并正确显示死亡窗口和文本,但窗口只会挂起。

当我使用Window.setTimeout()时,游戏会正确重置,并在调用start_game()函数之前等待正确的时间,但不会显示任何死亡屏幕或文本。

只需将setTimeout()设置为与window.setTimeout()相同。

山雀是怎么回事?任何和所有的倾向都是必需的,非常感谢

编辑:在下面添加了变量声明,全局变量。有相当多的代码,所以我不愿意将它全部粘贴,所以我添加了使用'loop'作为游戏循环

var c=document.getElementById("myCanvas");
var ctx = c.getContext('2d');
var background = new Image();
var loop;

loop = setInterval(function(){
    update();
    handleCollisions();
    draw();
}, 1000/FPS);

1 个答案:

答案 0 :(得分:0)

Document.setTimeout不是标准函数。如果您正在寻找延迟功能,因为您似乎是window.setTimeout是正确的。

所有未解析到本地范围的引用都会上升到父作用域,同样也会转移到其父作用域的父作用域。最上面的范围是window,如果函数未在可用范围的其他地方声明,那么这就是setTimeout === window.setTimeout的原因。

您的错误可能不在使用超时功能。我注意到你有像ctx这样的引用,这个引用没有在这个块中定义。请发布更多代码以获取更多帮助。