0

当您单击另一个窗口并返回时,画布会自动运行。

我添加了关键侦听器,当您单击w a s dupleftright、时,它们会使船移动down

一切正常,直到您单击向上和向右等两个按钮,然后单击另一个选项卡或窗口并返回。然后它会继续移动而不听你的输入。

我认为问题是,当您单击页面时,画布永远不会检查键是否被留下。但是当您单击屏幕时,如何使所有键都像未按下一样?当你离开屏幕时敌人也会消失这是按下按钮时发生的情况:

Player.prototype.checkKeys = function() //these functions are in the PLayer class
{


    if(this.isUpKey == true)//if true 
{
    if(Player1.drawY >= 0)
  {
 this.drawY -= this.Speed; 
  }
}

if(this.isRightKey == true)
{

 if(Player1.drawX <= (canvasWidthShips - this.playerWidth))
  {
  this.drawX += this.Speed;
  }
}

if(this.isDownKey == true)
{
  if(Player1.drawY <= (canvasHeightShips - this.playerHeight))
  {
  this.drawY += this.Speed;
  }
}

if(this.isLeftKey == true)
{
if(Player1.drawX >= 0)
 {
  this.drawX -= this.Speed;
  }
}
};

这些是我检查何时按下键的简单功能,我不认为错误在这里但不确定?

 function checkKeyDown(e)
{
if (Paused == false)
  {
 var KeyID = e.KeyCode || e.which;
if (KeyID === 38 || KeyID === 87)  //up and w keyboard buttons
  {

 Player1.isUpKey = true;
e.preventDefault(); //webpage dont scroll when playing

}

if (KeyID === 39 || KeyID === 68)  //right and d keyboard buttons
{

Player1.isRightKey = true;
e.preventDefault(); //webpage dont scroll when playing

 }

  if (KeyID === 40 || KeyID === 83)  //down and s keyboard buttons
 {

 Player1.isDownKey = true;
 e.preventDefault(); //webpage dont scroll when playing

 }

if (KeyID === 37 || KeyID === 65)  //left and a keyboard buttons
{

 Player1.isLeftKey = true;
e.preventDefault(); //webpage dont scroll when playing

 }

 }

 else if (Paused == true)
 {
 Player1.isUpKey = false;
 Player1.isDownKey = false;
 Player1.isRightKey = false;
 Player1.isLeftKey = false;

 }

 }

function checkKeyUp(e)
{


if (Paused == false)
  {
 var KeyID = e.KeyCode || e.which;
if (KeyID === 38 || KeyID === 87)  //up and w keyboard buttons
  {

  Player1.isUpKey = false;
  e.preventDefault(); //webpage dont scroll when playing


 }

 if (KeyID === 39 || KeyID === 68)  //right and d keyboard buttons
 {

 Player1.isRightKey = false;
e.preventDefault(); //webpage dont scroll when playing

}

if (KeyID === 40 || KeyID === 83)  //down and s keyboard buttons
{

 Player1.isDownKey = false;
e.preventDefault(); //webpage dont scroll when playing

}

if (KeyID === 37 || KeyID === 65)  //left and a keyboard buttons
{

Player1.isLeftKey = false;
e.preventDefault(); //webpage dont scroll when playing

}

}

else if (Paused == true)
 {
 Player1.isUpKey = false;
 Player1.isDownKey = false;
 Player1.isRightKey = false;
 Player1.isLeftKey = false;

 }

 }
4

1 回答 1

0

只是暂停游戏可以吗?您可以在失去焦点时触发的浏览器窗口上进行监听onblur,然后在事件处理程序中暂停游戏。

window.onblur = function() {
                // Add logic to pause the game here...
                Paused = true;
            };
于 2013-06-03T17:42:09.470 回答