p5.js:如何限制 keyPressed 只发送 1 个输出?

p5.js: how can I limit keyPressed to sending just 1 output?

我试图阻止玩家同时按下左右键,因为这样做会将“isLeft”和“isRight”都更改为 true。我已经尝试了下面的代码,但它使控件变得非常僵硬,例如,如果你在按下“A”之前太晚放开“D”,它会记录“D”被释放但不会记录“A​​” " 被按下(因为当“isRight”为真时 A 被按下。抱歉,如果这个类比太混乱...

我正在寻找一种通过按下“A”获取输入的方法,如果在释放“A”后仍然按下“D”,则立即从“D”获取输入。

提前致谢!

function keyPressed()
{
if ((key == 'A' || keyCode == 37) && !isRight)
    {
        isLeft = true;
    }
        
else if ((key == 'D' || keyCode == 39) && !isLeft)
    {
        isRight = true;
    }
}

在同时按下两个键时解释左键和右键的解决方案是监听 keyPressedkeyReleased。在 keyReleased 上,我们还可以检查备用键是否已经关闭。这种方法允许代码在两个键都按下并释放一个键时立即切换到另一个键

var isLeft = false;
var isRight = false;

function setup(){
    frameRate(10);
}

function keyPressed(){
  if ((key == 'A' || keyCode == 37) && !isRight){
    isLeft = true;
    } else if ((key == 'D' || keyCode == 39) && !isLeft) {
        isRight = true;
    }
}

function keyReleased(){
  if ((key == 'A' || keyCode == 37)){
    isLeft = false;
    if ((keyIsDown(16) && keyIsDown(68)) || keyIsDown(39)){
      isRight = true;
    }
  }      
  else if ((key == 'D' || keyCode == 39)){
    isRight = false;
    if ((keyIsDown(16) && keyIsDown(65))|| keyIsDown(37)){
      isLeft = true;
    }
  }
}

function draw(){
  console.log( " isLeft: "+isLeft + " isRight: " + isRight);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.8.0/p5.min.js"></script>

keyIsDown 检测是否有按键被按下。我不确定它是否适用于所有字符,但它适用于箭头键。如果您添加 !keyIsDown(RIGHT_ARROW),则它会查看右箭头是否向下。如果关闭,则 if 不为真,如果为假,则 if 为真,则为 运行.

如果这不起作用,请告诉我。

  function keyPressed()
{
if ((key == 'A' || keyCode == 37) && !isRight&&!keyIsDown(RIGHT_ARROW))
    {
        isLeft = true;
    }
        
else if ((key == 'D' || keyCode == 39) && !isLeft!keyIsDown(LEFT_ARROW))
    {
        isRight = true;
    }
}