Следует ли обрабатывать ввод в графическом интерфейсе при нажатии или отпускании кнопки?

12

В системе меню для нашей игры (выбор уровней, параметров и т. Д.) Игрок нажимает кнопку a на геймпаде, чтобы перейти к следующему экрану. Я кодировал систему меню, чтобы дождаться отпускания кнопки, прежде чем предпринимать какие-либо действия (т. Е. Отображать следующий экран). Некоторые недавние отзывы о тестировании подсказывали, что мы делаем это наоборот: действуем, как только нажимаем кнопку. Мне любопытно, что является стандартным способом, которым это обрабатывается, и это даже имеет значение?

Venesectrix
источник

Ответы:

32

В игре , которая контролируется геймпадом, где входы управления непосредственно изменить GUI фокус с одной кнопки на другую GUI, эти кнопки GUI должны быть активированы , когда кнопка находится контроллер нажата .

В игре, управляемой мышью (или если для перемещения курсора виртуальной мыши по экрану используется геймпад), экранные кнопки должны быть активированы, когда кнопка мыши / контроллера отпущена над той же кнопкой, на которой она находилась. нажал . (Если нажатие произошло над одной кнопкой GUI, а затем мышь была перемещена и отпущена поверх другой кнопки GUI, ни одна из кнопок GUI не активируется)

Причина этого заключается в том, что навыки управления мышью у людей сильно различаются, и часто у людей возникает небольшая проблема с позиционированием курсора именно там, где они этого хотят, или даже с точным указанием, над какой кнопкой графического интерфейса они на данный момент находятся. Теория состоит в том, что люди могут нажать и удерживать кнопку мыши, чтобы выделить кнопку GUI, и если эта кнопка GUI не была той, которую они намеревались использовать, они могут отодвинуть курсор от нее, прежде чем отпустить кнопку мыши, чтобы чтобы избежать нажатия на него.

Но если ваша игра управляется геймпадом, то вам абсолютно необходимо действовать, когда нажата кнопка геймпада, а не когда она отпущена.

Отредактируйте пять лет спустя:

Со времени, когда этот ответ был опубликован, начал появляться новый стандарт для работы с курсорами в стиле мыши, которые управляются геймпадами.

В ответе выше я предложил, чтобы они были реализованы так, чтобы они работали точно так же, как курсоры, которые фактически управляются мышами; выделите при наведении мыши, активируйте при наведении курсора, если курсор все еще находится над тем же элементом GUI.

Но теперь управляемые геймпадом курсоры обычно активируют действие графического интерфейса после того, как кнопка геймпада удерживается в течение некоторого времени(обычно около одной секунды). Если вы собираетесь следовать этой системе, вам понадобится экранный индикатор, показывающий, как долго будет происходить активация (часто это небольшое кольцо вокруг самого курсора, которое заполняется по мере приближения к активации при наведении указателя мыши), и вам все равно нужно выделить элемент, который будет активирован, во время удержания кнопки (и это может быть хорошей идеей, когда мышь находится над элементом, даже если если кнопка не удерживается). Пока кнопка удерживается, курсор не должен быть в состоянии перемещаться, чтобы избежать случайных активаций элементов графического интерфейса пользователя, если курсор толкается в последний момент.

Преимущество этой системы в том, что она позволяет пользователю, чей курсор в стиле мыши находится над неправильным местом, избежать активации этого элемента, просто отпустив кнопку раньше; стиль мыши «отойди от нее перед выпуском» менее естественен для выполнения на геймпаде, чем с помощью мыши, и этот подход позволяет пользователю геймпада отменить нежелательный щелчок намного легче.

Мы даже начинаем видеть, как несколько игр экспериментируют с этой моделью взаимодействия курсоров, даже когда их курсор перемещается реальной мышью. No Man's Sky делает это, как один из примеров. Будет интересно посмотреть, станет ли этот подход к взаимодействию с курсором мыши все более распространенным и ожидаемым в ближайшие годы.

Тревор Пауэлл
источник
10
+1. Действие должно быть выполнено при отпускании мыши, а не при нажатии мыши. Однако, чтобы это было эффективным, важно, чтобы сам элемент GUI изменял визуальное состояние при событии мыши.
Kylotan
+1 за то, чтобы вернуться, чтобы обновить вопрос через 5 лет, чтобы сохранить его актуальность.
lozzajp
Каждый раз, когда кто-то голосует или комментирует один из моих старых ответов, я перечитываю его, чтобы убедиться, что он все еще актуален. :)
Тревор Пауэлл
1

Я бы начал действовать, как только нажата клавиша.

Лучший пример, где действие происходило после выпуска ключа, было в Starcraft: Broodwar. Когда я нажимал клавиши очень быстро, я часто нажимал следующую клавишу, прежде чем полностью отпустить предыдущую, что приводило к игнорированию некоторых команд. (1A Click, 2A Click, 3A Click - 2 будет проигнорировано)

Это изменилось в Warcraft III, и в результате игра стала более отзывчивой, и у меня никогда не было проблем с «липкой контрольной группой» от Broodwar.

RoboKozo
источник