我和我的团队正在开发一个带有SDL / OpenGL的2D平台游戏,我们想用微软的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内部轮询之间的时间,或者我自己应该这样做?或者你推荐我什么?
如果我没有明确解释我,请不要犹豫。
非常感谢。
答案 0 :(得分:1)
您需要限制轮询。
XInputGetState返回游戏手柄的当前状态。只要调用checkKeyState(),您的应用程序就会轮询它。您可以偶尔轮询XInputGetState()并更新您自己保存的按钮状态。然后使用保存的按钮状态确定是否按下了某个键。
但这并不能解释您为什么要快速浏览菜单。只要按下按钮,checkKeyState就应该返回true。