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 に答える