2011-12-30 36 views
1

我和我的團隊正在開發一款帶有SDL/OpenGL的2D平臺遊戲,並且我們希望通過微軟XInput庫添加對Xbox360遊戲手柄的支持,但目前我們遇到了問題。使用XInput延遲Xbox360遊戲手柄的投票事件

首先,讀取關鍵州的方法是這樣:如果選擇的關鍵它按下或不

bool InputMapping::Gamepad::checkKeyState(WORD button) 
{ 
    DWORD dwResult; 
    DWORD idPlayer = playerID - 1; 

    XINPUT_STATE state; 
    ZeroMemory(&state, sizeof(XINPUT_STATE)); 

    dwResult = XInputGetState(idPlayer, &state); 

    if (state.Gamepad.wButtons & button) 
    { 
    return true; 
    } 

    return false; 
} 

此方法返回true或false。

但是,它似乎輪詢的關鍵是它的發生非常快,在菜單中,通過按鈕移動它非常快,我無法控制。

有一種方法可以限制XInput內部輪詢之間的時間,或者我應該自己做這件事嗎?或者你推薦我什麼?

如果我沒有明確解釋我,請不要猶豫,

非常感謝。

回答

1

您需要限制輪詢。

XInputGetState返回遊戲手柄的當前狀態。每當調用checkKeyState()時,您的應用程序都會輪詢它。你可以在一段時間內輪詢XInputGetState()並更新你自己保存的按鈕狀態。然後使用您保存的按鈕狀態來確定是否按下了一個按鍵。

儘管如此,這並不能解釋爲什麼你要快速瀏覽菜單。只要按住按鈕,checkKeyState就會返回true。