Habilita la entrada natural en todos los factores de forma

Computadora de escritorio con teclado y mouse El juego está en la pantalla y muestra entradas de pantalla táctil para el control de dirección y el mouse.
Figura 1: Entradas de teclado, mouse y pantalla táctil

Los dispositivos Android tienen diferentes formas y tamaños. Permite que los jugadores jueguen donde quieran, ya sea en un teléfono, una tablet, una PC, una TV, un automóvil o auriculares de XR, y extiende el alcance de tu juego. Aquí aprenderás lo siguiente:

Compatibilidad automática

Android tiene compatibilidad automática sin tacto cuando es posible, por ejemplo:

  • dispatchTouchEvent/onTouchEvent responden con eventos de movimiento, incluso para clics o entradas de pluma stylus. Esto significa que, si no marcas el tipo de herramienta, tu lógica de control táctil debería funcionar con el mouse y la pluma stylus.
  • Algunos eventos de gamepad y control de TV no controlados se vuelven a emitir como eventos de teclado.
  • Los factores de forma de PC, como Play Juegos y ChromeOS, generan toques a partir de clics del mouse de forma predeterminada. Dado que es posible que no haya una pantalla táctil a la que recurrir, esto proporciona un nivel básico de compatibilidad.

  • Los eventos del mouse y de la pluma stylus se envían a devoluciones de llamada táctiles.

  • Los eventos de control de juegos y control de TV no controlados se vuelven a emitir como eventos de teclado.

  • Los factores de forma similares a los de PC, como Play Juegos y ChromeOS, generan eventos táctiles en lugar de eventos del mouse de forma predeterminada para maximizar la compatibilidad con los juegos que esperan entradas de pantalla táctil.

Para brindar la mejor experiencia del usuario, implementa la compatibilidad directa con entradas no táctiles en lugar de depender de la compatibilidad automática.

Compatibilidad con todos los factores de forma

Android se ejecuta en una lista cada vez más grande de dispositivos. Ya sea que los jugadores desplieguen su teléfono en una tablet de pantalla grande, enciendan su TV compatible con Android, abran un juego para Android en su Chromebook o inicien un juego rápido en su automóvil mientras esperan que se cargue, puedes atraer a los jugadores en más lugares y en más pantallas que nunca. Solo debes asegurarte de que el juego se pueda jugar donde se encuentran tus jugadores:

Factor de forma Entrada predeterminada típica Pantalla táctil Mouse y teclado Controlador de juegos Pluma stylus1 Pad direccional de 5 direcciones
Teléfono Pantalla táctil
Pantalla grande Pantalla táctil
PC2 Mouse y teclado No No No
ChromeOS3 Panel táctil, mouse y teclado A veces
TV Pad direccional de 5 direcciones No No
Cars4
(SO para la industria automotriz)
Pantalla táctil No
Mirar5 Pantalla táctil No No No No

Esta tabla está diseñada para ayudarte a priorizar la compatibilidad con nuevos mecanismos de entrada destacando la entrada esperada en cada factor de forma. Ten en cuenta que debes hacer lo siguiente:

  • Evita tener un mecanismo de entrada predeterminado. Si lo haces, es posible que se restrinja de forma involuntaria el alcance de tus iniciativas sin contacto. Por ejemplo, aunque la mayoría de los jugadores quieren jugar juegos de ChromeOS con un mouse y un teclado, es posible que algunos quieran compatibilidad con pantallas táctiles según el perfil de su dispositivo.
  • Evita bloquear los mecanismos de entrada en los factores de forma. Android funciona con una amplia variedad de periféricos, y los dispositivos híbridos son cada vez más populares. Si quitas la compatibilidad con el teclado de la compilación para teléfonos, es posible que el juego se sienta incompleto si el jugador tiene una tablet que se envió con un teclado desmontable.

Entrada del mouse

Es posible que la pantalla más grande y envolvente de un jugador ejecute Android, ya sea una laptop con ChromeOS, una tablet o una PC con Android. Los jugadores suelen esperar jugar con un mouse en estos dispositivos, y agregar compatibilidad puede aumentar su participación. Android admite las funciones típicas de los sistemas operativos para computadoras, como las siguientes:

  • Compatibilidad con el clic izquierdo, derecho y del medio, así como con botones adicionales, como atrás y adelante
  • Detección de la rueda del mouse
  • Informes de movimiento del mouse absolutos o relativos (también conocidos como captura del puntero)
  • La capacidad de definir íconos de punteros personalizados

Existen guías específicas para los siguientes factores de forma:

Entrada del panel táctil

La captura de entrada del panel táctil en Android difiere ligeramente de la compatibilidad con el mouse. Cuando llamas a requestPointerCapture(), solicitas acceso sin procesar a los toques en la almohadilla. Esto significa que recibes eventos para cada toque de la misma manera que recibes eventos de varios toques de una pantalla táctil, excepto que las coordenadas están en el espacio de coordenadas del panel táctil en lugar del de la pantalla. En este modo, se inhabilitan la detección de gestos del panel táctil integrado de Android y el filtrado de la palma de la mano. Si, por ejemplo, el usuario mueve un dedo en la almohadilla y, al mismo tiempo, coloca el pulgar en la esquina inferior izquierda listo para hacer clic, depende de tu juego determinar qué movimiento del dedo se debe usar en tu lógica (por ejemplo, para mover la cámara).

Esto significa que los controles de juegos con paneles táctiles integrados se pueden usar de manera similar a una pantalla táctil para obtener una entrada sólida basada en gestos.

Para determinar si el jugador usa un mouse o un panel táctil durante la captura del puntero, verifica los valores de origen de InputDevice#getSources() o MotionEvent#getSource() en InputDevice.SOURCE_TOUCHPAD.

Entrada de teclado

La compatibilidad con el teclado es casi universal en todos los dispositivos Android. Según el tipo de juego que desarrolles, los beneficios de agregar la detección del teclado a tu juego van desde hacer que tu base de jugadores crezca, ya que lo haces más accesible, hasta hacerlo más inmersivo y intuitivo.

Estas son algunas formas comunes de mejorar tu juego con compatibilidad con el teclado:

  • La mecánica de multitoque se debe asignar al teclado para dispositivos sin pantalla táctil. Los juegos que requieren dos o más toques simultáneos, como moverse y saltar, se benefician de asignar estas acciones a las presiones del teclado para mejorar la jugabilidad en pantallas grandes y no táctiles.
  • Permite que se pueda navegar por los menús con el teclado. Agregar navegación con botones, como las teclas de flecha y Intro, a los menús y elementos de juego estáticos permite que los juegos se reproduzcan en TVs y mejora la accesibilidad en todos los factores de forma.
  • Agrega combinaciones de teclas para acciones en pantalla. Asigna a una acción del teclado cualquier elemento que un jugador pueda tocar en la pantalla. El acceso rápido a acciones como seleccionar unidades en un juego de estrategia o activar ranuras de inventario en un juego de acción mantiene a los jugadores inmersos en tu juego.

Recuerda que, aunque los teclados QWERTY son bastante comunes, existen muchos diseños populares diferentes, y algunos caracteres que son una sola pulsación de tecla en un diseño pueden ser un acorde en otro.

Si tu juego usa la posición relativa de las teclas para realizar acciones, como usar W, A, S y D como teclas de flecha para moverse, usa InputDevice.getKeyCodeforKeyLocation() para asignar la ubicación de una tecla QWERTY a un código de tecla en KeyEvent.getKeyCode(). Si el diseño del reproductor cambia, se llama a onInputDeviceChanged().

Cuando agregas entradas de texto a un juego, TextInput en GameActivity proporciona un mecanismo para controlar de forma confiable la entrada del IME, los signos diacríticos y otras variaciones de diseño específicas de la región sin dejar de usar el motor de renderización de texto en el juego. Esto evita muchos problemas de manejo de entradas del teclado directamente o con un widget EditText fuera de la pantalla.

Entrada del control de juegos

Una imagen de un gamepad típico. Tiene un pad direccional, cuatro botones frontales etiquetados como a, b, x e y, dos joysticks analógicos y cuatro gatillos. Hay números en la imagen, pero no se hace referencia a ellos en esta página.
Figura 2: Entradas del control de juegos

Los gamepads son compatibles de forma oficial con Android, incluidos los eventos de conexión y desconexión, la compatibilidad táctil, la compatibilidad de entrada avanzada, incluidos los giroscopios, y la compatibilidad de salida, como el color de la luz, cuando está disponible.

Los desarrolladores de apps pueden detectar entradas de controles de juegos a través de devolución de llamadas de View o Activity, pero se recomienda que los desarrolladores de juegos usen la biblioteca de controles de juegos, que tiene las siguientes características:

  • Está escrito en C++ para facilitar la integración en tu propio motor de juego.
  • Centraliza todas las funciones del gamepad en una sola API.
  • Elimina la ambigüedad de los símbolos en los botones frontales de un control de juegos, de modo que las etiquetas de tu juego puedan coincidir con el control de juegos de un jugador.
  • Unifica los informes de eventos de gamepad en los casos en que los botones serían entradas analógicas en algunos gamepads, pero entradas binarias en otros.
  • Proporciona retrocompatibilidad limitada en dispositivos Android más antiguos para gamepads más nuevos.

Entrada de la pluma stylus

Una imagen que muestra una app de dibujo. Los pinceles están abiertos y muestran las formas que se pueden dibujar con la pluma stylus.
Figura 3: App de dibujo con paleta de pinceles.

Android tiene compatibilidad avanzada con la pluma stylus en la mayoría de los dispositivos, incluida la presión, la orientación, la inclinación, el desplazamiento del cursor y la detección de la palma. Los eventos de la pluma stylus se envían a devoluciones de llamada táctiles para mejorar la compatibilidad, pero es importante probar con un dispositivo de pluma stylus en caso de que la lógica del motor filtre estos eventos. La integración completa beneficia a los juegos con pequeños objetivos táctiles o en los que el dibujo de forma libre se siente natural.

Cuando la renderización se retrasa con respecto al movimiento de la pluma stylus, la latencia es más evidente que cuando se bloquea con un dedo o se desconecta de la pantalla, como con un teclado, un mouse o un control de juegos. Por este motivo, Android proporciona una canalización de baja latencia para renderizar trazos con una latencia de tan solo 4 ms desde el movimiento de la pluma hasta que se muestra en la pantalla. Existen tres formas en que tu juego puede aprovechar esta función, lo que le permite conectarse directamente con el mundo real:

Controles de TV

Una imagen del control remoto de TV para Android. Se muestran un pad direccional, un botón de selección, un botón de micrófono o asistente, un botón de atrás y un botón de inicio.
Figura 4: Controlador de TV

Los dispositivos Android TV incluyen un control remoto con un pad direccional de 5 direcciones que comprende las cuatro direcciones cardinales y un botón OK. Las aplicaciones que usan el sistema de widgets integrado de Android los admiten de forma predeterminada, pero los desarrolladores deben probar los widgets personalizados de sus juegos para mantener la compatibilidad en los dispositivos de TV.

Consulta la documentación de Android TV para obtener más información.

Consideraciones adicionales

Para que los jugadores disfruten de la mejor experiencia, diseña en función de varias formas de entrada y alterna entre ellas sobre la marcha. De esta manera, un jugador puede cambiar rápidamente entre diferentes métodos de entrada según el modo de juego en el que se encuentre, o un juego puede migrar entre diferentes configuraciones de un dispositivo con Android con facilidad.

Con eso en mente, ten en cuenta lo siguiente:

  • Verificar la presencia de un tipo de entrada es mejor que filtrar por el factor de forma. Por ejemplo, si solo habilitas la compatibilidad con mouse y teclado en ChromeOS, los jugadores que usen tablets con teclados desmontables no se beneficiarán de tu esfuerzo adicional.
  • Existen consideraciones fuera del factor de forma que afectan la mejor forma de entrada. Por ejemplo, las necesidades de accesibilidad de un jugador pueden hacer que un mouse o una pantalla táctil sean difíciles o dolorosos de usar, pero un gamepad o un teclado son ideales.
  • Cualquier tipo de asistencia es mejor que no tener ninguna. Lo ideal es responder a los cambios de entrada sobre la marcha, pero los jugadores prefieren tener alguna asistencia en lugar de ninguna, siempre y cuando puedan acceder a ella.
  • La mejor entrada puede cambiar entre ejecuciones del juego. Por ejemplo, es preferible usar una pantalla táctil cuando se juega en cualquier lugar, un control de juegos cuando un teléfono está conectado a una TV y un mouse y un teclado cuando se está sentado en un escritorio.

Cómo responder a las entradas del usuario

Los juegos para dispositivos móviles típicos admiten un jugador por dispositivo. Para obtener los mejores resultados, un juego responde a todas las entradas posibles y cambia la IU según lo que el jugador esté usando de forma activa. De esta manera, una versión del juego funciona automáticamente en todos los factores de forma, y los jugadores incluso pueden combinar las entradas para satisfacer sus necesidades.

A menudo, los desarrolladores quieren tener un método de entrada predeterminado con retrasos integrados antes de cambiar la IU. ¿Qué significa esto?

  • Como la mayoría de los jugadores juegan en pantallas táctiles, muestra los controles táctiles al inicio. Si un jugador comienza a jugar con un teclado o un control de juegos y no usa la pantalla táctil durante un tiempo, la capa táctil se desvanecerá.
  • Si un jugador usa el control de juegos y presiona una tecla del teclado, cambia las sugerencias en el juego para mostrar los botones del teclado en lugar de los botones del control de juegos.
  • Cuando un jugador usa el teclado y el mando de juego al mismo tiempo, incorpora una demora antes de cambiar la IU de un conjunto de sugerencias a otro para evitar que la pantalla parpadee.
  • Verifica el tipo de fuente de entrada cuando proceses entradas. Las teclas del teclado y los botones del control de juegos emiten eventos de tecla presionada.
  • Intenta no marcar una entrada como controlada, a menos que tu juego pueda controlarla. Android vuelve a emitir algunos eventos para facilitar la compatibilidad con factores de forma más nuevos, por ejemplo, convirtiendo el botón A del mando de juegos en el botón OK.

Cómo anotar la compatibilidad con la entrada en tu manifiesto

Aunque no es obligatorio, puede ser mejor anotar con marcas de funciones del manifiesto qué tipo de entradas controlas. Estas son algunas marcas comunes:


  1. Los fabricantes pueden incorporar compatibilidad con la pluma stylus en algunos dispositivos, pero no hay un factor de forma en el que se garantice la compatibilidad. Las plumas stylus se pueden conectar a un dispositivo Android y aparecer como una pluma stylus. 

  2. Aunque algunas PCs admiten pantallas táctiles y plumas stylus, el cliente de Google Play Juegos solo responde a eventos del mouse desde el sistema operativo host. Para maximizar la compatibilidad, los eventos del mouse aparecen como eventos táctiles en el cliente de forma predeterminada. Consulta la sección Entrada del mouse para obtener más información. 

  3. Por lo general, los dispositivos ChromeOS son compatibles con mouse y teclado, pero las pantallas táctiles son opcionales. Muchos dispositivos con pantalla táctil también admiten la entrada de la pluma stylus. 

  4. El SO Android Automotive se refiere a los vehículos con Android integrado, que pueden funcionar sin un teléfono Android. Este gráfico hace referencia al SO Automotive. Android Auto proyecta una app de un teléfono al vehículo, y es posible que los dispositivos compatibles con Android Auto (proyección) no tengan una pantalla táctil. 

  5. Los dispositivos Wear OS tienen conectividad limitada. Puedes buscar periféricos Bluetooth, pero el SO suele fallar cuando se conecta.