2015-04-02 26 views
1

釷Windows事件循環通常是這樣的:哪個事件偵聽期間XINPUT事件

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    int wmId, wmEvent; 
    PAINTSTRUCT ps; 
    HDC hdc; 

    switch (message) 
    { 
    case WM_COMMAND: 
     wmId = LOWORD(wParam); 
     wmEvent = HIWORD(wParam); 
     // Parse the menu selections: 
     switch (wmId) 
     { 
     case IDM_ABOUT: 
      DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); 
      break; 
     case IDM_EXIT: 
      DestroyWindow(hWnd); 
      break; 
     default: 
      return DefWindowProc(hWnd, message, wParam, lParam); 
     } 
     break; 
    case WM_PAINT: 
     hdc = BeginPaint(hWnd, &ps); 
     // TODO: Add any drawing code here... 
     EndPaint(hWnd, &ps); 
     break; 
    case WM_DESTROY: 
     PostQuitMessage(0); 
     break; 
    default: 
     return DefWindowProc(hWnd, message, wParam, lParam); 
    } 
    return 0; 
} 

我想用XINPUT檢查是否按下d-鍵盤按鈕,如果是這樣,在屏幕上繪製的東西。但是,我傾聽哪個活動?我應該甚至聽一個事件。一旦我處理了按鈕按下,我該如何告訴程序繪製一些東西?

回答

1

我不認爲控制器會產生你在事件循環中捕獲的事件。 (我不會絕對發誓)

通常你所做的是定期(每幀)調用XInputGetState()它會告訴你控制器的狀態。 (如果XInputGetState()返回的是ERROR_SUCCESS以外的內容,那麼在該索引處沒有工作控制器。如果XInputGetState()返回ERROR_SUCCESS,那麼您在該索引處有一個有效的控制器。 (在我參與過的遊戲中,我們通過輪詢用戶ID 0到3來獲得最多4個控制器,但是如果您的遊戲或應用程序支持的控制器比您想要輪詢更多數字的控制器多,不知道最大數量是多少)

您需要保存每個幀的XINPUT_STATE,以便您可以將其與當前狀態進行比較。通過將保存的狀態與當前狀態進行比較,可以確定按鈕是否已更改。這也將爲您提供遊戲杆和模擬觸發器的模擬值。