Utilizando la API del Gamepad para una mejor experiencia de juego en la web

Rate this content
Bookmark

Esta charla explora el uso e impacto de la API del Gamepad en el espacio de los juegos web. La API del Gamepad te permite conectar y utilizar varios controladores de juegos con los navegadores, pero dado que esta API está en etapas muy tempranas, rastrear diferentes entradas de controladores en diferentes navegadores se vuelve extremadamente desafiante. Con este propósito, he lanzado una biblioteca de código abierto que proporciona soporte para eventos de presión de botones, movimiento de ejes y efectos de vibración en los navegadores. Nos enfocaremos en cómo podemos aprovechar esta biblioteca para brindar mejores experiencias de juego a los consumidores en la web.

FAQ

La API de Gamepad web es una especificación del W3C que define una interfaz de bajo nivel para representar dispositivos de juego como gamepads y joysticks en navegadores web, permitiendo a los desarrolladores conectar estos dispositivos al navegador y utilizarlos en aplicaciones de juegos.

La API de Gamepad es compatible con todos los navegadores modernos, lo cual facilita a los desarrolladores la creación de juegos y aplicaciones interactivas que pueden utilizar gamepads como método de entrada.

Puedes utilizar la función 'requestAnimationFrame' para consultar de manera continua los cambios de estado de los botones de un Gamepad. Esto te permite realizar un seguimiento preciso de si un botón fue presionado o no y actuar en consecuencia en tu juego o aplicación.

La API de Gamepad maneja dos eventos principales: 'GamepadConnected' y 'GamepadDisconnected'. Estos eventos se emiten cuando un Gamepad se conecta o desconecta del navegador, respectivamente.

JoypadJS es una biblioteca de código abierto que facilita la conexión y uso de varios controladores de juegos en navegadores que admiten la API de Gamepad. Proporciona una API basada en eventos para suscribirse a eventos de conexión, desconexión, botones presionados y movimientos del eje.

Arun sugiere implementar un bucle de juego que utilice 'requestAnimationFrame' para verificar continuamente los cambios en el estado de los botones y ejes de los Gamepads conectados. También propone utilizar eventos personalizados para rastrear estos cambios y despacharlos en el objeto window.

Para rastrear los movimientos de los ejes en un Gamepad, puedes recorrer los ejes y determinar qué joystick se movió, calculando la dirección del movimiento basada en los valores de los ejes. Luego, puedes utilizar eventos personalizados para enviar esta información.

Usar setInterval puede resultar en intervalos de retraso inconsistentes debido a la ejecución prioritaria de tareas intensivas. Una mejor alternativa es usar 'requestAnimationFrame', que se ejecuta al inicio del fotograma y se sincroniza con la frecuencia de actualización de la pantalla, ofreciendo un rendimiento óptimo.

Arun Michael Dsouza
Arun Michael Dsouza
21 min
28 Sep, 2023

Comments

Sign in or register to post your comment.

Video Summary and Transcription

La charla discute la API del Gamepad para su uso en el desarrollo de juegos en la plataforma web. Explora la API del Gamepad, que permite a los desarrolladores conectar dispositivos de juegos al navegador y utilizarlos en aplicaciones de juegos. La implementación de la API del Gamepad implica rastrear las pulsaciones de botones y los movimientos del joystick utilizando el request animation frame. La charla también presenta la biblioteca JoypadJS, que extiende la API del Gamepad para rastrear las pulsaciones de botones, los movimientos de los ejes y proporcionar retroalimentación háptica. JoypadJS funciona en navegadores modernos con soporte para la API del Gamepad y se utiliza en juegos, aplicaciones interactivas y proyectos de IoT.

1. Introducción a la API de Gamepad web

Short description:

Hola, y bienvenidos a mi charla para la Cumbre de Desarrollo de Juegos JS de este año. Hoy hablaré sobre la API de Gamepad web y cómo podemos extenderla y utilizarla de manera efectiva para crear juegos en la web. Hablemos sobre la plataforma web por un momento antes de adentrarnos en la API de Gamepad web. La web ha crecido mucho en la última década aproximadamente, y continúa creciendo a un ritmo rápido. El navegador se ha convertido en algo más que un renderizador o visor de documentos, y es gracias a este crecimiento y la continua adición de APIs ricas en funciones que los desarrolladores pueden crear aplicaciones web mucho más interactivas y eficientes.

Mi nombre es Arun. Y hoy hablaré sobre la API de Gamepad web y cómo podemos extenderla y utilizarla de manera efectiva para crear juegos en la web.

Primero, un poco sobre mí. Soy un ingeniero senior en Bloomberg, y principalmente trabajo con tecnologías web, construyendo software web empresarial y herramientas basadas en el navegador. También soy un entusiasta del código abierto. He contribuido a varios proyectos de código abierto, y algunos de mis propios proyectos, principalmente bibliotecas de extensión y módulos para Node, React, Angular, etc. Puedes visitar mi sitio web si quieres saber más sobre mí y mi trabajo.

Bien, sin más preámbulos, vamos directo al grano. Hablemos sobre la plataforma web por un momento antes de adentrarnos en la API de Gamepad web. Supongo que primero debemos reconocer el hecho de que la web ha crecido mucho en la última década aproximadamente, y continúa creciendo a un ritmo rápido. Todos sabemos que el navegador se ha convertido en algo más que un renderizador o visor de documentos, y es gracias a este crecimiento y la continua adición de APIs ricas en funciones que los desarrolladores pueden crear aplicaciones web mucho más interactivas y eficientes. Mejoras como eventos de luz ambiental, gráficos acelerados por GPU, acceso al sistema de archivos, y APIs de nivel inferior que proporcionan control nativo y acceso a hardware no solo permiten a los desarrolladores atender a una variedad más amplia de usuarios sino que también les permite admitir varios tipos de casos de uso. Lo cual no hubiera sido posible sin estas mejoras en la plataforma web. Aunque algunas de estas APIs están en etapas muy tempranas en este momento, parecen ser realmente, realmente prometedoras y dan una idea de cómo podría ser el desarrollo web en los próximos años.

2. Introducción a la API de GamePad

Short description:

Los navegadores se han vuelto lo suficientemente potentes como para manejar cálculos gráficos complejos para jugar videojuegos. La forma principal de entrada para los juegos web ha sido el teclado o el mouse, lo cual puede ser limitante para los dispositivos de pantalla táctil. La especificación GamePad permite a los desarrolladores conectar dispositivos de juego al navegador y utilizarlos en aplicaciones de juegos. La API expone un método en la interfaz Navigator para obtener información sobre los GamePads conectados y sus botones. La API de GamePad recomienda un diseño estándar de facto llamado Diseño Estándar de GamePad.

Los navegadores se han vuelto extremadamente potentes y capaces como para manejar cálculos gráficos complejos, especialmente para jugar videojuegos. Desde juegos de desplazamiento en 2D, emulación retro, hasta juegos en 3D de alta gama. Es posible jugar casi cualquier tipo de juego en la web hoy en día.

Y para la mayoría de estos juegos que vemos y jugamos en la web, la forma principal de entrada siempre ha sido mediante el teclado o el mouse. Y para dispositivos de pantalla táctil, hemos visto diseños de controles en pantalla como estos, que a veces pueden dificultar la experiencia de juego. Y el uso de este tipo de controles puede resultar bastante complicado para los jugadores que prefieren controles más naturales, como un pad direccional o un joystick para los movimientos del personaje.

Ahora, los juegos de escritorio proporcionan esta flexibilidad de utilizar dispositivos externos como gamepads y joysticks, tal vez porque tienen soporte nativo incorporado. Pero cuando se trata de la web, durante mucho tiempo no ha habido soporte nativo para esto en absoluto. Los desarrolladores tenían que diseñar interfaces complejas basadas en el mouse o el teclado para los controles del juego, lo cual puede ser bastante complicado de operar.

Así que, hace unos años, el W3C introdujo la especificación GamePad, que define una interfaz de bajo nivel para representar dispositivos de juego. Esto significa que utilizando esta API, los desarrolladores podrán conectar GamePads y dispositivos similares al navegador y luego utilizarlos en sus aplicaciones de juegos. Esto significa que podrás utilizar dispositivos como el DualShock, Joy-Con e incluso dispositivos de próxima generación como el DualSense y los controladores de Xbox Series X.

Hasta el día de hoy, la especificación GamePad sigue siendo un trabajo en progreso. Se publica como un borrador de trabajo. La especificación tiene la intención de convertirse en una recomendación del W3C. Por ahora, podemos ver que la API en sí es compatible con todos los navegadores modernos, lo cual es definitivamente una buena señal. Así que echemos un vistazo a los detalles de la API en sí. La API expone un método en la interfaz Navigator que devuelve una lista de objetos GamePad, y cada objeto GamePad representa un GamePad que está conectado al navegador. Ahora, esta interfaz GamePad devuelve información útil sobre el GamePad conectado. Información relacionada con los botones, los ejes, que son básicamente los joysticks. Los estados actuales y otra información como el ID del dispositivo, el estado, etc. Si observamos de cerca los botones del GamePad, vemos que cada botón es una instancia de la interfaz GamePadButton. Esto representa un botón individual en el GamePad y permite acceder al estado actual del botón. Utilizando esto, podemos determinar si el botón fue presionado o no y llevar a cabo la acción correspondiente en el juego. Ahora, cada fabricante de GamePads crea muchos tipos diferentes de productos y cada uno puede tener un estilo o diseño único de botones y ejes. Pero es responsabilidad del agente de usuario, por supuesto, admitir tantos de estos como sea posible, por eso la API de GamePad recomienda un diseño estándar de facto llamado Diseño Estándar de GamePad. Y este diseño se ha vuelto popular gracias a muchas consolas de juegos. Y en este diseño, los botones y ejes se disponen en un orden particular que veremos. Así es como se ve el Diseño Estándar de GamePad y en este diseño, las ubicaciones de los botones se colocan en un grupo izquierdo de cuatro botones, un grupo derecho de cuatro botones, un grupo central de tres botones.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Optimización de juegos HTML5: 10 años de aprendizaje
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Optimización de juegos HTML5: 10 años de aprendizaje
Top Content
El motor de juegos de código abierto PlayCanvas está construido específicamente para el navegador, incorporando 10 años de aprendizaje sobre optimización. En esta charla, descubrirás la salsa secreta que permite a PlayCanvas generar juegos con tiempos de carga increíblemente rápidos y tasas de fotogramas sólidas como una roca.
Remix Flat Routes – Una Evolución en el Enrutamiento
Remix Conf Europe 2022Remix Conf Europe 2022
16 min
Remix Flat Routes – Una Evolución en el Enrutamiento
Top Content
Esta charla presenta la nueva convención Flat Routes que probablemente será la predeterminada en una futura versión de Remix. Simplifica la convención existente y también te brinda nuevas capacidades.
Construyendo Experimentos Divertidos con WebXR & Babylon.js
JS GameDev Summit 2022JS GameDev Summit 2022
33 min
Construyendo Experimentos Divertidos con WebXR & Babylon.js
Top Content
Durante esta sesión, veremos un par de demostraciones de lo que puedes hacer usando WebXR, con Babylon.js. Desde experimentos de audio en VR, hasta juegos casuales en VR en una máquina de arcade hasta un uso más serio para crear nuevas formas de colaboración usando AR o VR, deberías tener una comprensión bastante buena de lo que puedes hacer hoy.
Consulta también el artículo para ver el contenido completo, incluyendo ejemplos de código: artículo. 
Creando juegos increíbles con LittleJS
JS GameDev Summit 2022JS GameDev Summit 2022
34 min
Creando juegos increíbles con LittleJS
LittleJS es un motor de juegos súper ligero que es fácil de usar y extremadamente rápido. El desarrollador hablará sobre por qué lo creó, qué hace y cómo puedes usarlo para crear tus propios juegos. La charla incluirá una demostración de cómo construir un pequeño juego desde cero con LittleJS.
Cómo no construir un videojuego
React Summit 2023React Summit 2023
32 min
Cómo no construir un videojuego
En esta charla profundizaremos en el arte de crear algo significativo y gratificante. A través de la mirada de mi propio viaje de redescubrir mi pasión por la programación y construir un videojuego desde cero con JavaScript y React, exploraremos los compromisos entre soluciones fáciles y rendimiento rápido. Obtendrás información valiosa sobre prototipado rápido, infraestructura de pruebas y una variedad de trucos de CSS que se pueden aplicar tanto al desarrollo de juegos como a tu trabajo diario.
¡Mejora el rendimiento de tus juegos WebGL Unity!
JS GameDev Summit 2023JS GameDev Summit 2023
7 min
¡Mejora el rendimiento de tus juegos WebGL Unity!
Unity, cuando se implementa en la web, enfrenta tres desafíos críticos: el tamaño de la compilación, el uso de memoria y el rendimiento general. Esta charla profundiza en técnicas avanzadas de optimización para ayudarte a abordar cada uno de estos problemas. Los asistentes obtendrán información sobre:
- Estrategias efectivas para optimizar texturas, audio y modelos.- Un análisis detallado de nuestra experimentación con ASTC en Unity, arrojando luz sobre los resultados inesperados a pesar de las afirmaciones de Unity.- Una guía completa de la herramienta de perfilado de memoria de Unity y sus implicaciones.- Una exploración de configuraciones de Unity menos conocidas que siguen siendo subutilizadas por muchos desarrolladores.
Además, presentaremos nuestra herramienta propietaria diseñada específicamente para la optimización de Unity. También mostraremos el panel de control para desarrolladores de CrazyGames, nuestra plataforma que permite a los desarrolladores monitorear y mejorar el rendimiento de sus juegos web de manera fluida.
Únete a nosotros para equiparte con las últimas estrategias y herramientas para elevar tus proyectos de juegos web de Unity.

Workshops on related topic

Crea un Juego Con PlayCanvas en 2 Horas
JSNation 2023JSNation 2023
116 min
Crea un Juego Con PlayCanvas en 2 Horas
Top Content
Featured WorkshopFree
Steven Yau
Steven Yau
En esta masterclass, construiremos un juego utilizando el motor WebGL de PlayCanvas desde el principio hasta el final. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la escritura de scripts, la creación de UI y mucho más.
Tabla de contenido:- Introducción- Introducción a PlayCanvas- Lo que vamos a construir- Agregando un modelo de personaje y animación- Haciendo que el personaje se mueva con scripts- 'Falsa' carrera- Agregando obstáculos- Detectando colisiones- Agregando un contador de puntuación- Fin del juego y reinicio- ¡Resumen!- Preguntas
Nivel de la masterclassSe recomienda familiaridad con los motores de juegos y los aspectos del desarrollo de juegos, pero no es obligatorio.
PlayCanvas de principio a fin: la versión rápida
JS GameDev Summit 2022JS GameDev Summit 2022
121 min
PlayCanvas de principio a fin: la versión rápida
Top Content
WorkshopFree
João Ruschel
João Ruschel
En esta masterclass, construiremos un juego completo utilizando el motor PlayCanvas mientras aprendemos las mejores prácticas para la gestión de proyectos. Desde el desarrollo hasta la publicación, cubriremos las características más cruciales como la gestión de activos, scripting, audio, depuración, y mucho más.
Introducción a WebXR con Babylon.js
JS GameDev Summit 2022JS GameDev Summit 2022
86 min
Introducción a WebXR con Babylon.js
Workshop
Gustavo Cordido
Gustavo Cordido
En este masterclass, te presentaremos los conceptos básicos de la construcción de experiencias de Realidad Mixta con WebXR y Babylon.js.
Aprenderás lo siguiente:- Cómo agregar objetos de malla 3D y botones a una escena- Cómo utilizar texturas procedurales- Cómo agregar acciones a objetos- Cómo aprovechar la experiencia predeterminada de Realidad Cruzada (XR)- Cómo agregar física a una escena
Para el primer proyecto en este masterclass, crearás una experiencia interactiva de Realidad Mixta que mostrará estadísticas de jugadores de baloncesto a fanáticos y entrenadores. Para el segundo proyecto en este masterclass, crearás una aplicación WebXR activada por voz utilizando Babylon.js y Azure Speech-to-Text. Luego, desplegarás la aplicación web utilizando el alojamiento de sitios web estáticos proporcionado por Azure Blob Storage.
Construyendo el Metaverso Interconectado y Traversable
JS GameDev Summit 2022JS GameDev Summit 2022
103 min
Construyendo el Metaverso Interconectado y Traversable
WorkshopFree
Avaer Kazmer
Avaer Kazmer
Basado en gran medida en Free Association en el Metaverso - Avaer @Exokit - M3, Avaer demostrará algunas de las formas en que los estándares abiertos permiten la travesía abierta y gratuita de usuarios y activos en todo el metaverso interconectado.
Cómo crear experiencias de edición que tu equipo amará
React Advanced Conference 2021React Advanced Conference 2021
168 min
Cómo crear experiencias de edición que tu equipo amará
Workshop
Lauren Etheridge
Knut Melvær
2 authors
El contenido es una parte crucial de lo que construyes en la web. Las tecnologías web modernas aportan mucho a la experiencia del desarrollador en términos de construir sitios impulsados por contenido, pero ¿cómo podemos mejorar las cosas para los editores y creadores de contenido? En este masterclass aprenderás cómo usar Sanity.io para abordar la modelización de contenido estructurado, y cómo construir, iterar y configurar tu propio CMS para unificar los modelos de datos con experiencias de edición eficientes y agradables. Está dirigido a desarrolladores web que desean ofrecer mejores experiencias de contenido para sus equipos de contenido y clientes.