Processing中如何正确记录按键按住时长?现有方案存在问题
解决Processing中按键按住时长正确记录的问题
我来帮你搞定这个问题——你遇到的核心问题其实是Processing的keyPressed()函数默认会重复触发(就像按住键盘字母键会连续打出字符一样),所以按住'e'的时候,t会被不断重置,最后释放时计算的自然是最后一次触发keyPressed()到释放的极短时间。
要解决这个问题,我们只需要加一个状态标记变量,确保keyPressed()里的起始时间只在按键第一次按下时记录一次。
修正后的代码示例
// 状态变量:标记'e'键是否已经处于按下状态 boolean isEPressed = false; long pressStartTime; void keyPressed(){ // 只有当'e'键未被按下时,才记录起始时间 if (key == 'e' && !isEPressed){ pressStartTime = millis(); isEPressed = true; // 标记为已按下,避免重复触发记录 } } void keyReleased(){ if (key == 'e'){ // 计算按住时长 long holdDuration = millis() - pressStartTime; println("按键按住时长:" + holdDuration + "ms"); isEPressed = false; // 重置状态,等待下一次按键 } }
代码逻辑说明
isEPressed变量用来跟踪'e'键的状态:初始为false,表示按键未按下;第一次按下时设为true,阻止keyPressed()重复记录起始时间。- 按键释放时,计算当前时间与起始时间的差值得到按住时长,同时把
isEPressed重置为false,确保下次按下'e'时能重新记录起始时间。
如果需要处理多个按键,只需要给每个按键单独设置对应的状态变量(比如isAPressed、isSPressed)即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Kartashuvit
相关产品推荐
相关产品推荐

