处理 3.3.7 - “key”变量并不总是代表最后按下的键

我正在尝试创建一个草图,该草图将使用 WASD 键在 Processing 3.3.7 IDE 中的屏幕上移动字符。

当释放一个键并同时按下另一个键时,我遇到了一个问题,该key变量在大约一秒钟内不会更改为新输入。我把有问题的代码减少到这个:

void draw(){
  println(key);
  }

使用此代码,您可以看到,当您释放一个键并开始尽可能连续地按住另一个键(可能仅在同一帧上)时,打印值将不会改变大约一秒钟(可能会因您的键重复时间而异)。这真的很烦人,我不知道如何解决它。


aluckdog
浏览 137回答 1
1回答

慕桂英3389331

println()众所周知,该功能在计时方面很糟糕,因此对于这样的微基准测试,我不相信它。此外,该key变量保存了与之交互的最后一个键,这可能是您释放的键而不是您按下的键。例如,考虑以下事件序列:我按下了a键。该key变量变a。我按下了s键。该key变量变成s。现在我松开a钥匙。的key变量切换回a。我仍然握着s键,所以一秒钟后,我的键盘触发了另一个s键事件,将key变量切换到s.如果你想在键盘事件更细粒度的控制,我建议使用类似事件的功能keyPressed()和keyReleased()。您可能希望使用在事件函数中设置的一组变量来跟踪按下了哪些键。下面是一个例子:boolean aPressed = false;boolean sPressed = false;void draw(){  if(aPressed){    // a is pressed  }  if(sPressed){    // s is pressed  }}void keyPressed(){  if(key == 'a'){    aPressed = true;  }  else if(key == 's'){    sPressed = true;  }}void keyReleased(){  if(key == 'a'){    aPressed = false;  }  else if(key == 's'){    sPressed = false;  }}无耻的自我推销:这里是处理输入事件的教程。请参阅处理多个按键部分以阅读有关此方法的更多信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java