Задержка событий опроса геймпада Xbox360 с XInput - PullRequest
1 голос
/ 30 декабря 2011

Моя команда и я в настоящее время разрабатываем 2D-платформер с SDL / OpenGL, и мы хотим добавить поддержку геймпада Xbox360 с библиотекой XInput от Microsoft, но в настоящее время у нас возникла проблема.

все, метод для чтения клавиши гласит:

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 Ответ

1 голос
/ 23 июля 2012

Вам нужно ограничить опрос.

XInputGetState возвращает текущее состояние геймпада. Ваше приложение опрашивает его всякий раз, когда вызывается checkKeyState (). Вы можете просто время от времени опрашивать XInputGetState () и обновлять собственное сохраненное состояние кнопки. Затем используйте сохраненное состояние кнопки, чтобы определить, нажата ли клавиша.

Это не объясняет, почему вы очень быстро перемещаетесь по меню. checkKeyState должен возвращать true, пока кнопка удерживается нажатой.

...