亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

處理 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 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號