Stick arcade

En esta página se describen los conceptos básicos de la programación para los stick arcade mediante Windows.Gaming.Input.ArcadeStick y las API relacionadas para la Plataforma universal de Windows (UWP).

Al leer esta página, aprenderá lo siguiente:

  • cómo recopilar una lista de los stick arcade conectados y sus usuarios
  • cómo detectar que se ha agregado o quitado un stick arcade
  • cómo leer la entrada de uno o varios stick arcade
  • cómo se comportan los stick arcade como dispositivos de navegación de la interfaz de usuario

Introducción a stick arcade

Los stick arcade son dispositivos de entrada que se valoran para reproducir la sensación de las máquinas arcade de pie y para sus controles digitales de alta precisión. Los stick arcade son el dispositivo de entrada perfecto para las peleas cara a cara y otros juegos de estilo arcade, y son adecuados para cualquier juego que funcione bien con controles totalmente digitales. Los stick arcade son compatibles con aplicaciones UWP para Windows 10 o Windows 11 y aplicaciones Xbox One a través del espacio de nombres Windows.Gaming.Input.

Los stick arcade están equipados con un joystick digital de ocho direcciones, seis botones de acción (representados como A1-A6 en la imagen a continuación) y dos botones especiales (representados como S1 y S2); son dispositivos de entrada totalmente digitales que no admiten controles analógicos ni vibración. Los stick arcade también están equipados con los botones Ver y Menú que se utilizan para admitir la navegación por la interfaz de usuario, pero no están diseñados para admitir comandos de juego y no se puede acceder a ellos fácilmente como botones de joystick.

Arcade stick with 4-directional joystick, 6 action buttons (A1-A6), and 2 special buttons (S1 and S2)

Navegación de la interfaz de usuario

Para facilitar la carga de admitir muchos dispositivos de entrada diferentes para la navegación de la interfaz de usuario y fomentar la coherencia entre juegos y dispositivos, la mayoría de los dispositivos de entrada físicos actúan simultáneamente como un dispositivo de entrada lógico independiente denominado controlador de navegación de interfaz de usuario. El controlador de navegación de la interfaz de usuario proporciona un vocabulario común para los comandos de navegación de la interfaz de usuario en todos los dispositivos de entrada.

Como controlador de navegación de la interfaz de usuario, los stick arcade asignan el conjunto requerido de comandos de navegación al joystick y a los botones Ver, Menú, Acción 1 y Acción 2.

Comando de navegación Entrada de stick arcade
Up (Arriba) Stick hacia arriba
Bajar Stick hacia abajo
Izquierda Stick hacia la izquierda
Right Stick hacia la derecha
Ver Botón Ver
Menú Botón de menú
Aceptar Botón Acción 1
Cancelar Botón Acción 2

Los stick arcade no asignan ninguno de los conjuntos opcionales de comandos de navegación.

Detección y seguimiento de los stick arcade

La detección y el seguimiento de los dispositivos stick arcade funcionan exactamente de la misma manera que para los controladores para juegos, excepto que con la clase ArcadeStick en lugar de la clase Gamepad. Consulte Controlador para juegos y vibración para obtener más información.

Lectura del stick arcade

Después de identificar el stick arcade que le interesa, está listo para recopilar las entradas. Sin embargo, a diferencia de otros tipos de entrada a los que podría estar acostumbrado, los stick arcade no comunican cambios de estado generando eventos. En su lugar, se toman lecturas regulares de su estado actual sondear.

Sondeo del stick arcade

El sondeo captura una instantánea del stick arcade en un momento preciso en el tiempo. Este enfoque para la recopilación de entradas es una buena opción para la mayoría de los juegos porque su lógica normalmente se ejecuta en un bucle determinista en lugar de ser controlado por eventos; también suele ser más sencillo interpretar los comandos de juego de la entrada recopilada de una vez que de muchas entradas únicas recopiladas a lo largo del tiempo.

Puede sondear un dispositivo arcade llamando a GetCurrentReading; esta función devuelve ArcadeStickReading que contiene el estado del stick arcade.

En el ejemplo siguiente se sondea un stick arcade para su estado actual.

auto arcadestick = myArcadeSticks[0];

ArcadeStickReading reading = arcadestick->GetCurrentReading();

Además del estado del stick arcade, cada lectura incluye una marca de tiempo que indica exactamente cuándo se recuperó el estado. La marca de tiempo es útil para relacionarse con el tiempo de las lecturas anteriores o con el tiempo de la simulación del juego.

Lectura de los botones

Cada uno de los botones del stick arcade (las cuatro direcciones del joystick, seis botones de acción, y dos botones especiales) proporciona una lectura digital que indica si está presionado (hacia abajo) o se libera (hacia arriba). Para mejorar la eficacia, las lecturas de botón no se representan como valores booleanos individuales; en su lugar, todos están empaquetados en un solo campo de bits representado por la enumeración ArcadeStickButtons.

Nota:

Los stick arcade están equipados con botones adicionales que se utilizan para la navegación por la interfaz de usuario, como los botones Ver y Menú. Estos botones no forman parte de la enumeración ArcadeStickButtons y solo se pueden leer accediendo al stick arcade como dispositivo de navegación de la interfaz de usuario. Para obtener más información, consulte Dispositivo de navegación de la interfaz de usuario.

Los valores del botón se leen desde la propiedad Buttons de la estructura ArcadeStickReading. Dado que esta propiedad es un campo de bits, el enmascaramiento de bits se usa para aislar el valor del botón que le interesa. El botón se presiona (abajo) cuando se establece el bit correspondiente; de lo contrario, se libera (arriba).

En el ejemplo siguiente se determina si se presiona el botón Acción 1.

if (ArcadeStickButtons::Action1 == (reading.Buttons & ArcadeStickButtons::Action1))
{
    // Action 1 is pressed
}

En el ejemplo siguiente se determina si se libera el botón Acción 1.

if (ArcadeStickButtons::None == (reading.Buttons & ArcadeStickButtons::Action1))
{
    // Action 1 is released (not pressed)
}

A veces, es posible que desee determinar cuándo un botón cambia de presionado a liberado o de liberado a presionado, si se presionan o sueltan varios botones, o si un conjunto de botones se organizan de una manera determinada, algunos presionados y otros no. Para obtener información sobre cómo detectar estas condiciones, consulte Detección de transiciones de botón y Detección de arreglos complejos de botones.

Ejecución del ejemplo InputInterfacing

El ejemplo InputInterfacingUWP (GitHub) demuestra cómo usar los stick arcade y diferentes tipos de dispositivos de entrada en conjunto, así como también cómo estos dispositivos de entrada se comportan como controladores de navegación de la interfaz de usuario.

Consulte también