我正在尝试创建一个草图,该草图将使用WASD键在Processing 3.3.7 IDE中在屏幕上移动字符。
当释放一个键并同时按下另一个键时,我遇到一个问题,key
变量将在大约一秒钟的时间内不会更改为新输入。我将令人讨厌的代码缩减为:
void draw(){
println(key);
}
使用此代码,您可以看到,当您释放一个键并开始尽可能连续地紧紧握住另一个键(可能仅在同一帧上)时,打印值将不会改变约一秒钟(可能会有所不同,具体取决于您的内容)。键重复时间)。这真的很烦人,我不知道该如何解决。
感谢阅读!
答案 0 :(得分:0)
众所周知,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是有关处理输入事件的教程。请参阅处理多次按键部分,以详细了解此方法。