Processing中,多个按键的键盘交互怎么实现? 举报 理由 举报 取消 processing里面的键盘交互中,我print了key这个值,当你按下z时会打印出z,按下z的同时按x会打印出x,松开x键仍然是x,我想让它松开x键的时候(z一直按着)打印出z怎么实现??? 2017年12月11日 1 条回复 1007 次浏览 Processing,编程语言
回复 ( 1 )
我想先将题主的问题作一个一般化:如何在 Processing 中实现按任意顺序按下和释放任意个键,在此过程中永远只输出最后按下的那个还没释放的键的键值。
这个问题的难点首先在于在 Processing 中变量 key 保存的始终是最后一个按下或释放的那个键的值。因此按下一个键不放,再按另一个键之后,第一个键的信息如果事先没有被程序员主动保存起来的话就会「丢失」掉再也找不回来了。其次是虽然 Processing 的官方文档说布尔型变量 keyPressed 是只要有键被按下它的值就是 true,但文档里没有提到的是当同时有多个键被按下后,只要有一个 keyRelease 事件发生,keyPressed 就不再为 true 了,即使此时仍有键没被松开。
要解决上面提到的问题,我的做法是用 IntList 数据类型做一个堆栈,可以按下任意个键,按下的键值会按先后顺序入栈,其间也可以松开任意的键,松开的键就从栈中抽走,因而栈顶的键值就永远是最后按下的那个还没有松开的键值。然后通过判断栈的高度是否非零(不是通过 keyPressed 的值,原因前面已经提到)来确定是否打印栈顶的键值。
这是程序: