Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

128
Vistas
Obtener el último elemento al hacer clic cada vez en el bucle de Javascript con Phaser JS

Estoy haciendo un juego en Phaser, aunque creo que el núcleo de este problema es la falta de comprensión de JS.

Estoy recorriendo un contenedor de Phaser y deseo aplicar un controlador de clic en cada sprite secundario, pero cuando ejecuto el clic en cualquiera de los sprites, siempre devuelve el último elemento secundario.

He probado varias sugerencias sobre Stack Overflow, por ejemplo, aquí: cierre de JavaScript dentro de los bucles: ejemplo práctico simple

pero nunca puede obtener el clic para devolver algo que no sea el último elemento.

Un ejemplo:

 let items = //my container with 4 child sprites to click on let i = 0; item.list.forEach(function(obj) { obj.setInteractive(); (function(i) { obj.on('pointerdown', function(i){ console.log(i); }.bind(this, i)); })(i); i++; });

En este ejemplo, cada sprite en el que hago clic genera '3' en la consola, cuando debería generar 0, 1, 2 o 3, según en qué se haya hecho clic.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Su código es un poco complicado. Si solo desea agregar un EventHandler, no necesita un cierre adicional. Simplemente revise el código a continuación, para un enfoque más ágil

Ejemplo de trabajo:

 // Minor formating for stackoverflow document.body.style = "display: flex;flex-direction: column;"; var config = { type: Phaser.AUTO, width: 536, height: 183, scene: { create }, banner: false }; function create () { let items = this.add.container(10, 10); items.add(this.add.sprite(20, 20, 'sprite')); items.add(this.add.sprite(20, 60, 'sprite')); items.add(this.add.sprite(20, 100, 'sprite')); items.list.forEach(function(obj, index) { obj.setInteractive(); obj.on('pointerdown', function(){ console.log(`You clicked: sprite with index ${index}`); }, this); // although I don't know why you would want do bind this "this" }); } var game = new Phaser.Game(config);
 <script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"> </script>

  • Aquí los documentos del método forEach https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach , explica el index utilizado
  • Aquí los documentos de Phaser on listener https://photonstorm.github.io/phaser3-docs/Phaser.GameObjects.Sprite.html#on__anchor , explica el paso del contexto.
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda