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.
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
forEachhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach , explica elindexutilizado- Aquí los documentos de Phaser
onlistener https://photonstorm.github.io/phaser3-docs/Phaser.GameObjects.Sprite.html#on__anchor , explica el paso del contexto.