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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理3.3.7 - “key”变量并不总是代表最后按下的键相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个草图,它将使用WASD键在Processing 3.3.7 IDE中围绕屏幕移动角色。

当一个键被释放而另一个键被同时按下时,我遇到了问题,key变量将不会更改为新输入大约一秒钟。我将违规代码减少到这个:

void draw(){
  println(key);
}

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

谢谢阅读!

答案

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;
  }
}

无耻的自我推销:here是处理输入事件的教程。请参阅处理多个按键部分以了解有关此方法的更多信息。

以上是关于处理3.3.7 - “key”变量并不总是代表最后按下的键的主要内容,如果未能解决你的问题,请参考以下文章

条件变量并不总是有效

shell处理输入

SwiftUI DatePicker 并不总是更新 State<Date> 变量

Wordpress 下一篇文章并不总是链接到正确的文章和如果最后一篇文章

动画 | 什么是堆排序?

#if 预处理器指令并不总是崩溃