Dans une interface graphique, la saisie doit-elle être gérée lorsque le bouton est enfoncé ou relâché?

12

Dans le système de menus de notre jeu (sélection des niveaux, options, etc.), le joueur appuie sur le bouton a de la manette de jeu pour passer à l'écran suivant. J'ai codé le système de menus pour attendre que le bouton soit relâché avant de prendre toute action (c'est-à-dire afficher l'écran suivant). Certains commentaires récents sur les tests de jeu ont suggéré que nous procédions dans le sens inverse: agissez dès que le bouton est enfoncé. Je suis curieux, quelle est la manière standard dont cela est géré, et cela fait-il même une différence?

Venesectrix
la source

Réponses:

32

Dans un jeu contrôlé par une manette de jeu, où les entrées de contrôle modifient directement le focus de l'interface graphique d'un bouton GUI à un autre, ces boutons GUI doivent être activés lorsqu'un bouton du contrôleur est enfoncé .

Dans un jeu contrôlé par une souris (ou si une manette de jeu est utilisée pour déplacer le curseur d'une souris virtuelle sur l'écran), les boutons à l'écran doivent être activés lorsque le bouton de la souris / du contrôleur est relâché sur le même bouton sur lequel il était. pressé . (Si la presse s'est produite sur un bouton GUI, et que la souris a ensuite été déplacée et relâchée sur un bouton GUI différent, aucun bouton GUI n'est activé)

La raison en est que les compétences de contrôle de la souris des gens sont très variables, et souvent les gens ont un peu de mal à positionner le curseur exactement où ils le veulent, ou même à dire précisément sur quel bouton GUI ils survolent en ce moment. La théorie est que les gens peuvent appuyer et maintenir le bouton de la souris pour mettre le bouton GUI en surbrillance, et si ce bouton GUI n'était pas celui qu'ils avaient l'intention d'utiliser, ils peuvent en éloigner le curseur avant de relâcher le bouton de la souris afin pour éviter d'appuyer dessus.

Mais si votre jeu est contrôlé par une manette de jeu, vous devez absolument agir lorsque vous appuyez sur le bouton de la manette de jeu, et non lorsqu'il est relâché.

Edit, cinq ans plus tard:

Depuis que cette réponse a été publiée, une nouvelle norme a commencé à émerger pour la gestion des curseurs de type souris contrôlés par des manettes de jeu.

Dans la réponse ci-dessus, j'ai suggéré que ceux-ci devraient être implémentés pour fonctionner exactement comme les curseurs qui sont réellement contrôlés par les souris; surlignez la souris vers le bas, activez la souris vers le haut si le curseur est toujours sur le même élément GUI.

Mais maintenant, les curseurs contrôlés par la manette de jeu activent généralement une action GUI après que le bouton de la manette de jeu a été maintenu enfoncé pendant un certain temps(généralement environ une seconde). Si vous allez suivre ce système, vous aurez besoin d'avoir un indicateur à l'écran indiquant combien de temps jusqu'à l'activation aura lieu (souvent c'est un petit anneau autour du curseur lui-même, qui se remplit à mesure que vous vous rapprochez de l'activation du bouton survolé), et vous devez toujours mettre en surbrillance l'élément qui sera activé, pendant le temps que le bouton est maintenu enfoncé (et ce pourrait être une bonne idée de le faire chaque fois que la souris survole un élément, même si le bouton n'est pas maintenu). Pendant que le bouton est maintenu enfoncé, le curseur ne doit pas pouvoir être déplacé, afin d'éviter des activations accidentelles d'éléments GUI si le curseur est bousculé au dernier moment.

L'avantage de ce système est qu'il permet à un utilisateur dont le curseur de style souris se trouve au mauvais endroit d'éviter d'éviter d'activer cet élément en relâchant simplement le bouton plus tôt; le style de souris "s'éloigner de lui avant de relâcher" est moins naturel à réaliser sur une manette de jeu qu'avec une souris, et cette approche permet à un utilisateur de manette de jeu d'interrompre un clic indésirable beaucoup plus facilement.

Nous commençons même à voir quelques jeux expérimenter ce modèle d'interaction avec le curseur même lorsque leur curseur est déplacé par une vraie souris. No Man's Sky fait cela, à titre d'exemple. Il sera intéressant de voir si cette approche de la gestion de l'interaction souris-curseur deviendra de plus en plus courante et attendue dans les années à venir.

Trevor Powell
la source
10
+1. L'action doit être prise à la sortie de la souris, pas à la souris. Cependant, pour que cela soit efficace, il est important que l'élément GUI lui-même change d'état visuel lors de l'événement souris vers le bas.
Kylotan
+1 pour revenir pour mettre à jour la question 5 ans plus tard afin de la maintenir pertinente.
lozzajp
Chaque fois que quelqu'un vote ou commente une de mes anciennes réponses, je la relis pour m'assurer qu'elle est toujours à jour. :)
Trevor Powell
1

Je prendrais des mesures dès que la touche est enfoncée.

Le meilleur exemple où l'action a eu lieu après la libération de la clé était dans Starcraft: Broodwar. Lorsque j'appuyais sur les touches très rapidement, j'appuyais souvent sur la touche suivante avant de relâcher complètement la précédente, ce qui entraînait l'ignorance de certaines commandes. (Clic 1A, Clic 2A, Clic 3A - le 2 serait ignoré)

Cela a été changé dans Warcraft III et le jeu m'a semblé beaucoup plus réactif en conséquence et je n'ai jamais eu les problèmes de `` groupe de contrôle collant '' de Broodwar.

RoboKozo
la source