En una GUI, ¿se debe manejar la entrada cuando se presiona o suelta el botón?

12

En el sistema de menús de nuestro juego (selección de niveles, opciones, etc.), el jugador presiona el botón a en el control para ir a la siguiente pantalla. Codifiqué el sistema de menús para esperar hasta que se suelte el botón antes de realizar cualquier acción (es decir, mostrar la siguiente pantalla). Algunos comentarios recientes de la prueba de juego sugirieron que lo hagamos de la manera opuesta: tome medidas tan pronto como presione el botón. Tengo curiosidad, ¿cuál es la forma estándar en que se maneja esto? ¿Hay alguna diferencia?

Venesectrix
fuente

Respuestas:

32

En un juego controlado por un gamepad, donde las entradas de control cambian directamente el foco de la GUI de un botón de la GUI a otro, esos botones de la GUI deben activarse cuando se presiona un botón del controlador .

En un juego controlado por un mouse (o si se usa un gamepad para mover el cursor virtual del mouse por la pantalla), los botones en pantalla deben activarse cuando se suelta el botón del mouse / controlador sobre el mismo botón en el que estaba presionado . (Si se presionó sobre un botón de la GUI, y luego se movió el mouse y se soltó sobre un botón de la GUI diferente, ninguno de los botones de la GUI se activa)

La razón de esto es que las habilidades de control del mouse de las personas son muy variables, y a menudo las personas tienen un pequeño problema para colocar el cursor exactamente donde lo quieren, o incluso para decir con precisión qué botón GUI están pasando en este momento. La teoría es que las personas pueden presionar y mantener presionado el botón del mouse para resaltar el botón GUI, y si ese botón GUI no era el que pretendían usar, pueden alejar el cursor de él antes de soltar el botón del mouse en orden para evitar presionarlo.

Pero si su juego está siendo controlado por un gamepad, entonces absolutamente desea tomar medidas cuando se presiona el botón del gamepad, no cuando se suelta.

Editar, cinco años después:

En el tiempo transcurrido desde que se publicó esta respuesta, ha comenzado a surgir un nuevo estándar para manejar cursores estilo mouse que son controlados por gamepads.

En la respuesta anterior, sugerí que deberían implementarse para funcionar exactamente como los cursores que en realidad están siendo controlados por ratones; resalte con el mouse hacia abajo, actívelo con el mouse hacia arriba si el cursor todavía está sobre el mismo elemento GUI.

Pero ahora, los cursores controlados por el gamepad normalmente activan una acción GUI después de que el botón del gamepad se ha mantenido presionado durante un período de tiempo(típicamente alrededor de un segundo). Si va a seguir este sistema, necesitará tener un indicador en pantalla que muestre cuánto tiempo hasta que se produzca la activación (a menudo, este es un pequeño anillo alrededor del cursor, que se llena a medida que se acerca a la activación de durante el tiempo que se mantenga presionado el botón (y podría ser una buena idea hacerlo siempre que el mouse esté sobre un elemento, incluso si no se mantiene presionado el botón). Mientras se mantiene presionado el botón, el cursor no debe poder moverse, para evitar activaciones accidentales de elementos GUI si el cursor se empuja en el último momento.

El beneficio de este sistema es que permite que un usuario cuyo cursor de estilo del mouse esté sobre el lugar equivocado evite activar ese elemento simplemente soltando el botón antes; el estilo de "alejarse de él antes de soltar" es menos natural de lograr en un gamepad que con un mouse, y este enfoque permite que un usuario de gamepad aborte un clic no deseado con mucha más facilidad.

Incluso estamos empezando a ver algunos juegos que experimentan con este modelo de interacción con el cursor, incluso cuando un cursor real mueve su cursor. No Man's Sky hace esto, como un ejemplo. Será interesante ver si este enfoque para manejar la interacción ratón-cursor será cada vez más común y esperado en los próximos años.

Trevor Powell
fuente
10
+1. La acción debe realizarse al soltar el mouse, no al presionar el mouse. Sin embargo, para que esto sea efectivo, es importante que el elemento GUI cambie el estado visual en el evento de mouse-down.
Kylotan
+1 por volver a actualizar la pregunta 5 años después para mantenerla relevante.
lozzajp
Cada vez que alguien vota o comenta una de mis respuestas anteriores, la releo para asegurarme de que todavía esté actualizada. :)
Trevor Powell
1

Tomaría medidas tan pronto como se presione la tecla.

El mejor ejemplo donde la acción tuvo lugar después de que se soltó la clave fue en Starcraft: Broodwar. Cuando presionaba las teclas muy rápidamente, a menudo presionaba la siguiente tecla antes de liberar por completo la anterior, lo que hacía que algunos comandos se ignoraran. (1A Click, 2A Click, 3A Click - los 2 serían ignorados)

Esto cambió en Warcraft III y, como resultado, el juego me pareció mucho más receptivo y nunca tuve los problemas del "grupo de control rígido" de Broodwar.

RoboKozo
fuente