XInput的使用
前言
最近需要偵測XBox的手把,所以就研究了一下XInput,在此做個紀錄。內容
XInput用起來相當簡單,首先先看以下的程式碼DWORD dwResult; for (DWORD i=0; i< XUSER_MAX_COUNT; i++ ) { XINPUT_STATE state; ZeroMemory( &state, sizeof(XINPUT_STATE) ); // Simply get the state of the controller from XInput. dwResult = XInputGetState( i, &state ); if( dwResult == ERROR_SUCCESS ) { // Controller is connected } else { // Controller is not connected } }
可以看到一個"XUSER_MAX_COUNT",這個Marco會定義最多可以用的手把數量,接著透過XInputGetState()來偵測目前的輸入,第1個參數就是指第幾隻手把,而第二個參數是一個"XINPUT_STATE",裡面會儲存所有的輸入資訊。
"XINPUT_STATE"裡的"XINPUT_GAMEPAD"會儲存手把的按鍵資訊,以下示範取得按鍵的範例
XINPUT_STATE state; if(state.Gamepad.wButtons&XINPUT_GAMEPAD_DPAD_LEFT) { //Left button was pressed... }
接著是取得類比輸入的範例
XINPUT_STATE state; float leftThumbX = fminf(1.0f,( (float)state.Gamepad.sThumbLX) / 32767); float leftThumbY = fminf(1.0f,( (float)state.Gamepad.sThumbLY) / 32767);
這樣就可以得到類比輸入的X與Y值,但要注意的是當類比歸位的時候(就是不動的時候),類比的數值並回會剛好是0.0f,他會有一個微小的誤差,這範圍大概設在-0.1f~0.1f,要記得過濾掉。
參考資料
XInput Game Controller APIsXINPUT_GAMEPAD structure
沒有留言:
張貼留言