首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 遊戲手柄程式開發——API 篇(二)下:按鍵重複狀態完美解決方案

     編輯:關於C語言

問題情境

玩遊戲時常邊移動邊攻擊(按住方向鍵不放,連按 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);
}

至此手柄程式開發講解完畢,下一篇將實作「手柄模擬鍵盤/滑鼠」軟體。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved