Realice un seguimiento de cada puntero activo deliberadamente
Para un simple arrastre, almacene el pointerId desde pointerdown y actualícelo solo mientras ese puntero esté activo. La captura del puntero puede mantener movimientos posteriores y eventos de liberación dirigidos al elemento del juego cuando el puntero viaja más allá de sus límites. Maneje pointerup y pointercancel como finales separados y elimine el estado en ambas rutas para que un gesto perdido no pueda dejar el juego atascado.
No des por hecho que solo hay un puntero, salvo que el diseño limite la entrada. Un segundo dedo, un lápiz o un ratón pueden generar otro pointerId. Si el juego solo permite un arrastre activo, ignora los demás punteros de forma predecible, sin dejar que sustituyan al primero.
Elija cuando el tipo de dispositivo importa
PointerEvent expone pointerType cuando es necesario tratar de forma distinta el tacto, el lápiz y el ratón. Por ejemplo, una mecánica de dibujo puede usar la presión del lápiz, mientras que un botón de menú debería aceptar cualquier puntero principal. No bifurques el código por tipo de dispositivo solo para recrear sistemas de eventos separados: añade casos que probar sin mejorar la interacción.
Los navegadores pueden emitir eventos de mouse de compatibilidad alrededor de la entrada del puntero, así que evite manejar una acción dos veces a través de ambos sistemas. Pruebe un mouse, un contacto táctil y un lápiz cuando esos dispositivos estén dentro del alcance. MDN documenta la captura de punteros, los identificadores de punteros y la relación de la familia de eventos con los eventos del mouse.
Preguntas sobre eventos de puntero para juegos
¿Los eventos de puntero hacen que el mouse y el tacto sean idénticos?
Comparten un modelo de evento, pero las propiedades y las expectativas de los usuarios aún pueden diferir. Utilice pointerType u otros detalles del evento solo cuando una mecánica tenga una necesidad específica de un dispositivo concreto.
¿Cuándo debería un juego utilizar la captura de puntero?
Usa la captura cuando un arrastre activo deba seguir recibiendo movimiento y el evento de liberación, aunque el puntero salga de la zona interactiva del elemento. Libera la captura durante la limpieza y gestiona también la cancelación.
Más información
¿Has visto algo desactualizado? Notificar una corrección