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

C# 遊戲手柄程式開發——API 篇(二)中:主動模式 joyGetPosEx 與按鍵去抖邏輯

     編輯:關於C語言

joyGetPosEx 使用

需初始化 JOYINFOEX 結構,設定 dwSize(Marshal.SizeOf 取得)與 dwFlags(如 JOY_RETURNBUTTONS 取得按鈕狀態)。

JOYINFOEX infoEx = new JOYINFOEX();
infoEx.dwSize = Marshal.SizeOf(typeof(JOYINFOEX));
infoEx.dwFlags = (int)JOY_RETURNBUTTONS;
int result = joyGetPosEx(this.Id, ref infoEx);

成功回傳 JOYERR_NOERROR (0)。資料存於 infoEx:dwXPos/dwYPos 判斷方向鍵,dwButtons 判斷其他按鈕。

主動模式需輪詢

可用獨立執行緒死迴圈或 Timer 定時執行。但直接處理同樣面臨按鍵重複問題。

解決按鍵重複:記錄上一次按鍵比對

previousButtons = 無;
while (true) {
    if (joyGetPosEx(...) == 成功) {
        JoyButtons buttons = 取得當前按下按鍵(joyInfo);
        if (buttons != 無) {
            if (buttons != previousButtons) {
                OnClick(buttons); // 通知新按鍵集合
                previousButtons = buttons;
            }
        }
    }
    Sleep(uPeriod);
}

此版本通知完整當前按鍵集合,下一篇將改良為差集通知。

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