玩遊戲時常邊移動邊攻擊(按住方向鍵不放,連按 A/B 鍵)。輪詢中會出現:
右鍵 → 右鍵 → 右鍵+A → 右鍵 → 右鍵+B → 右鍵 …
若單純比對上一次按鍵集合,方向鍵會被判定為多次點擊。
每次輪詢取得當前按下按鍵集合,與上一次比對,僅通知差集(新增的按鍵)。
流程:
1. 右鍵(新增) → 通知右鍵
2. 右鍵(無差異) → 不通知
3. 右鍵+A(新增 A) → 通知 A
4. 右鍵(無差異) → 不通知
5. 右鍵+B(新增 B) → 通知 B
結果:右鍵只通知一次,A、B 各通知一次,完全符合人類操作邏輯。
previousButtons = 無;
while (true) {
if (joyGetPosEx(手柄號, ref joyInfo) == 成功) {
JoyButtons buttons = 取得當前按下按鍵(joyInfo);
if (buttons != 無) {
if (buttons != previousButtons) {
OnClick(buttons - previousButtons); // 僅通知差集
previousButtons = buttons;
}
}
}
Sleep(uPeriod);
}
至此手柄程式開發講解完畢,下一篇將實作「手柄模擬鍵盤/滑鼠」軟體。