Oneshot Gems
Jugar ahora

Para desarrolladores de juegos

Asigna a los listeners un único responsable y ciclo de vida

Si un clic se activa dos veces después de reiniciar, es posible que se registre un oyente cada vez que se abra la escena y nunca se elimine. Ese síntoma visible de acción duplicada es diferente de una investigación amplia de pérdida de memoria: comience contando los registros y vinculándolos al ciclo de vida de la escena. Cada oyente debe tener un propietario claro, un punto de configuración que se ejecute una vez para ese propietario y una ruta de desmontaje cuando la escena deje de aceptar entradas.

En esta página

Regístrese en un límite deliberado del ciclo de vida

Evite adjuntar un controlador de pulsación de tecla de ventana desde una función de renderizado o desde cada cuadro. Coloque la configuración específica de la escena en una función de inicio o montaje y asegúrese de que la función no pueda ejecutarse dos veces sin una limpieza. Mantenga una referencia a la devolución de llamada cuando utilice removeEventListener; las devoluciones de llamada anónimas creadas repetidamente son difíciles de comparar más adelante. Alternativamente, asigne un AbortController a un grupo de controladores relacionados y pase su señal en las opciones del oyente, luego aborte ese grupo cuando finalice la escena.

Elija los objetivos del evento con cuidado. Un detector de ventana global puede ser apropiado para las teclas mientras un juego está activo, pero el controlador de clic de un botón pertenece a ese botón. No registre un controlador delegado en el elemento padre y un controlador directo para la misma acción a menos que la propagación de eventos sea intencionalmente parte del diseño.

Pruebe la entrada repetida a la escena como verificación de síntomas

Abra una escena, presione su acción una vez, salga y ábrala nuevamente. Una entrada aún debería causar un efecto. Repita el ciclo cinco veces y verifique que el recuento de respuestas siga siendo uno por pulsación; Esta es una verificación funcional, no una medición de la memoria. Confirme también que la entrada de la escena anterior ya no cambie su puntuación o estado después de la salida. MDN documenta el soporte de AbortSignal para agrupar listeners y señala que las funciones anónimas necesitan conservar referencias para su eliminación explícita.

Mantenga el desmontaje alineado con la propiedad

Cuando se reemplaza una escena, cancele o elimine sus listeners antes de deshacerse de los objetos a los que hacen referencia. Si algunos listeners pertenecen a todo el shell de la aplicación, manténgalos en un propietario de mayor duración en lugar de eliminarlos durante cada ronda. Agregue un caso de regresión en torno a los flujos de reinicio, pausa y regreso al menú, ya que cada transición puede montar accidentalmente la misma escena dos veces u omitir su limpieza.

Preguntas sobre ⁨evitar listeners de eventos de juegos duplicados⁩

¿Por qué presionar una tecla produce múltiples acciones de juego?

La misma acción puede tener varios controladores registrados, o tanto un antepasado como un hijo pueden procesar el evento. Cuente los registros e inspeccione la propagación de eventos en el límite del ciclo de vida de la escena.

¿Puede AbortController eliminar detectores de eventos?

Sí. Agregue listeners relacionados con la misma señal y aborte el grupo cuando termine su propietario. Esto le da al grupo un camino claro de desmantelamiento; no reemplaza decidir qué propietario los controla.

Más información

¿Has visto algo desactualizado? Notificar una corrección

Sigue jugando.

Juegos de navegador gratis, listos cuando tú quieras. Encuentra uno que te guste y conviértelo en tu nuevo favorito.

Sigue tu curiosidad