Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 暂停功能使游戏崩溃_Javascript_Html_Canvas_Html5 Canvas - Fatal编程技术网

Javascript 暂停功能使游戏崩溃

Javascript 暂停功能使游戏崩溃,javascript,html,canvas,html5-canvas,Javascript,Html,Canvas,Html5 Canvas,因此,我正在制作一个无止境的跑步者游戏,并且我制作了一个函数,当事件运行时应该暂停游戏,但是当我尝试玩游戏时,它崩溃/无法加载。有人知道为什么吗?我还尝试了if函数而不是while循环,但当我按下P键时,什么也没发生。基本上,如果PP布尔值设置为false,我希望它冻结所有内容 如果您想测试它,我这里有: 以下是我的代码(仅相关位): //布尔值 放松=错误; 失望=错误; 让HKD=真; 设PP=true; //控制 document.onkeydown=函数(e){ 如果(HKD&e.key

因此,我正在制作一个无止境的跑步者游戏,并且我制作了一个函数,当事件运行时应该暂停游戏,但是当我尝试玩游戏时,它崩溃/无法加载。有人知道为什么吗?我还尝试了if函数而不是while循环,但当我按下
P
键时,什么也没发生。基本上,如果
PP
布尔值设置为false,我希望它冻结所有内容

如果您想测试它,我这里有:

以下是我的代码(仅相关位):

//布尔值
放松=错误;
失望=错误;
让HKD=真;
设PP=true;
//控制
document.onkeydown=函数(e){
如果(HKD&e.keyCode==38)UP=true;
HKD=假;
如果(e.keyCode==40)DOWN=true;
};
document.onkeyup=函数(e){
如果(!e.repeat&&e.keyCode==38)UP=false;
如果(e.keyCode==40)DOWN=false;
};
document.onkeypress=功能(e){
如果(e.keyCode==80&&PP)PP=false;
如果(e.keyCode==80&&!PP)PP=true;
};
//框架
函数更新(){
//清楚的
clearRect(0,0,512,512);
//环境
ctx.drawImage(bg,0,0);
ctx.drawImage(fl,0384);
ctx.drawImage(fl,128384);
ctx.drawImage(fl,256,384);
ctx.drawImage(fl,384384);
ctx.drawImage(cb,10,10);
ctx.drawImage(c,0.5,0,c.宽度/2,c.高度/2);
ctx.font=“40px font”;
ctx.textAlign=“左”;
ctx.textb基线=“顶部”;
ctx.fillStyle=“#ae7640”;
ctx.fillText(0,55,15);
//敌人
如果(mx>=-128){
ctx.drawImage(m,mx-=速度,256);
}else if(mx=-256){
ctx.drawImage(b,bx-=速度,215);
}else if(bx=-384){
ctx.drawImage(c,cx-=速度,280);
}否则,如果(cx 100){
ctx.drawImage(pl,0,y-=速度);
}否则{
向上=错误;
};
}否则,如果(!向上){
if(y<256){
ctx.drawImage(pl,0,y+=速度);
}否则{
ctx.drawImage(pl,0,y);
};
};
//向下
如果(向下){
pl.src=“./Assets/Duck.png”;
}否则,如果(!向下){
pl.src=“./Assets/Idle.png”;
};
};
while(PP){
设置间隔(更新,10);
};
上面的代码无限调用setInterval,这将创建无限多个间隔。相反,您只想
setInterval
一次,然后在
update
中检查
PP
是否为真,如果为假则跳过函数体

function update() {
  if(PP){
    // Clear
    ctx.clearRect(0, 0, 512, 512);

    // Environment
    ctx.drawImage(bg, 0, 0);
    // ...
  }
};
setInterval(update, 10);
对代码的其他注释:您应该为变量命名,让其他人可以理解,并且在结束“}”后不需要分号。此外,如果不是函数,

上面的代码无限调用setInterval,这将创建无限多个间隔。相反,您只想
setInterval
一次,然后在
update
中检查
PP
是否为真,如果为假则跳过函数体

function update() {
  if(PP){
    // Clear
    ctx.clearRect(0, 0, 512, 512);

    // Environment
    ctx.drawImage(bg, 0, 0);
    // ...
  }
};
setInterval(update, 10);

对代码的其他注释:您应该为变量命名,让其他人可以理解,并且在结束“}”后不需要分号。另外,
如果
不是函数。

问题可能就在这里-

document.onkeypress = function(e) {
  if (e.keyCode == 80 && PP) PP = false;
  if (e.keyCode == 80 && !PP) PP = true;
};
最初PP=true

现在,如果用户按下“p” 如果条件为真且PP为假,则为1

现在将检查第二个条件!PP将解析为true,因为之前执行了if代码,所以PP将恢复为true

您可能需要使用上面的if-else,即

document.onkeypress = function(e) {
  if (e.keyCode == 80 && PP) PP = false;
  else if (e.keyCode == 80 && !PP) PP = true;
};

问题可能就在这里-

document.onkeypress = function(e) {
  if (e.keyCode == 80 && PP) PP = false;
  if (e.keyCode == 80 && !PP) PP = true;
};
最初PP=true

现在,如果用户按下“p” 如果条件为真且PP为假,则为1

现在将检查第二个条件!PP将解析为true,因为之前执行了if代码,所以PP将恢复为true

您可能需要使用上面的if-else,即

document.onkeypress = function(e) {
  if (e.keyCode == 80 && PP) PP = false;
  else if (e.keyCode == 80 && !PP) PP = true;
};

请添加一个!请添加一个!隐马尔可夫模型。。。我试过了,但是当我按下
P
键时,它仍然不会冻结画布,它只是像正常一样继续。控制台中也没有错误。嗯。。。我试过了,但是当我按下
P
键时,它仍然不会冻结画布,它只是像正常一样继续。控制台中也没有错误。谢谢!工作得棒极了!非常感谢。工作得棒极了!