Javascript 暂停功能使游戏崩溃
因此,我正在制作一个无止境的跑步者游戏,并且我制作了一个函数,当事件运行时应该暂停游戏,但是当我尝试玩游戏时,它崩溃/无法加载。有人知道为什么吗?我还尝试了if函数而不是while循环,但当我按下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
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
键时,它仍然不会冻结画布,它只是像正常一样继续。控制台中也没有错误。谢谢!工作得棒极了!非常感谢。工作得棒极了!