处理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”变量并不总是代表最后按下的键的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI DatePicker 并不总是更新 State<Date> 变量