Управление графическим интерфейсом с помощью большого пальца слишком быстро переключает пункты меню - PullRequest
0 голосов
/ 13 декабря 2010

Я работаю над разработкой систем меню для очень простого теста понг, который я сделал, и столкнулся с некоторыми проблемами с помощью кнопок. Несколько примеров, которые я видел, показывают, что код для перемещения вверх и вниз на экране меню выглядит просто:

if (controller.Thumbsticks.Left.Y > 0.5f) MenuUp();

Хотя теоретически это работает, этот тест выполняется каждый кадр (в вызове Update(), якобы), проверяя состояние контроллера примерно 60 раз в секунду. Так как средний пользователь удерживает джойстик вверх, по крайней мере, на четверть секунды, в результате, нажатие на джойстик контроллера циклически перебирает все меню почти мгновенно.

Возможно, я мог бы реализовать какую-то сложную систему таймера, где она проверяет, сколько времени прошло с момента последнего изменения пункта меню и как долго удерживался джойстик, но ни один из найденных в сети примеров не использовал такой сложный система времени. Я что-то упустил?

Редактировать: Эндрю попросил в комментарии ниже ссылки на эти учебники, которые я нашел:

  • Этот использует if (controller.isButtonPressed(Buttons.LeftThumbstickUp)), но это та же идея.
    http://create.msdn.com/en-US/education/catalog/sample/game_state_management
  • Я понимаю, что это XNA 2.0 (я работаю с 4.0), но принцип остается
    http://www.sgtconker.com/2010/08/nick-gravelyns-alien-aggressors-tutorial/
  • Кроме того, в книге Чеда Картера "Microsoft XNA Game Studio 3.0 Unleashed" на стр. 530 приведен аналогичный код. Его система проверяет предыдущее состояние геймпада, поэтому его система не будет прокручивать сразу несколько вариантов, но она также не позволяет вам прокручивать - каждый раз, когда вы хотите перейти вверх по пункту меню, вы нужно переместить джойстик назад в центр и снова сдвинуть его вверх. Мне больше нравится поведение, когда вы нажимаете и удерживаете клавишу на клавиатуре: появляется одна буква, небольшая задержка, а затем начинает повторять букву в определенном темпе.

1 Ответ

1 голос
/ 13 декабря 2010

Вы связали несколько успешных уроков, демонстрирующих эту технику.Что именно здесь вопрос?Основная предпосылка, как вы заявляете, если вы просто проверяете / перемещаете каждый кадр, результат будет непонятен для пользователя.

Самый простой вариант - сохранить «предыдущее состояние» контроллера.А если в последнем кадре уже был нажат «вниз», то вы воздерживаетесь от от перемещения пункта меню.Это позволяет обрабатывать одно действие пользователя только один раз.

...