我正在开发一个小小的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);
答案 0 :(得分:0)
Document.setTimeout
不是标准函数。如果您正在寻找延迟功能,因为您似乎是window.setTimeout
是正确的。
所有未解析到本地范围的引用都会上升到父作用域,同样也会转移到其父作用域的父作用域。最上面的范围是window
,如果函数未在可用范围的其他地方声明,那么这就是setTimeout === window.setTimeout
的原因。
您的错误可能不在使用超时功能。我注意到你有像ctx
这样的引用,这个引用没有在这个块中定义。请发布更多代码以获取更多帮助。