为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

aluckdog 2021-08-25 17:27:40
我正在尝试创建一个草图,该草图将使用 WASD 键在 Processing 3.3.7 IDE 中的屏幕上移动字符。当释放一个键并同时按下另一个键时,我遇到了一个问题,该key变量在大约一秒钟内不会更改为新输入。我把有问题的代码减少到这个:void draw(){   println(key);   }使用此代码,您可以看到,当您释放一个键并开始尽可能连续地按住另一个键(可能仅在同一帧上)时,打印值将不会改变大约一秒钟(可能会因您的键重复时间而异)。这真的很烦人,我不知道如何解决它。
查看完整描述

1 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

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;

  }

}

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


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信