You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:02:19