使用XInput延迟Xbox360游戏手柄的轮询事件

时间:2011-12-30 03:01:21

标签: c++ delay xinput

我和我的团队正在开发一个带有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内部轮询之间的时间,或者我自己应该这样做?或者你推荐我什么?

如果我没有明确解释我,请不要犹豫。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要限制轮询。

XInputGetState返回游戏手柄的当前状态。只要调用checkKeyState(),您的应用程序就会轮询它。您可以偶尔轮询XInputGetState()并更新您自己保存的按钮状态。然后使用保存的按钮状态确定是否按下了某个键。

但这并不能解释您为什么要快速浏览菜单。只要按下按钮,checkKeyState就应该返回true。