1

我和我的团队目前正在使用 SDL/OpenGL 开发 2D 平台游戏,我们希望使用 Microsoft 的 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 内部轮询之间的时间,还是我应该自己做?或者你推荐我什么?

如果我没有清楚地解释我,请不要犹豫。

非常感谢。

4

1 回答 1

1

您需要限制轮询。

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

但是,这并不能解释为什么您在菜单中移动得非常快。只要按下按钮,checkKeyState 就应该返回 true。

于 2012-07-22T22:02:27.050 回答