Soy un novato de JS, Phaser3 y Socket.io y tengo muchas ganas de aprender.
Contexto del código:
Asunto:
Tengo el socket escuchando en la función "create ()" de Phaser3 para "universeState" después de que se haya conectado al servidor de socket. índice.js:
this.socket.on('universeState',(universe)=> { console.log(`mass? ${JSON.stringify(universe.sys.mass[1].id)}`) for(let i = 0;i < universe.sys.mass.length; i++) { console.log(universe.sys.mass[i].id,universe.sys.mass[i].x,universe.sys.mass[i].y,universe.sys.mass[i].asset); this.utils.genMass(universe.sys.mass[i].id,universe.sys.mass[i].x,universe.sys.mass[i].y,universe.sys.mass[i].asset); console.log(`check: 3 ${JSON.stringify(this.state.state.mass)}`); this.state.state.mass[universe.sys.mass[i].id].sprite.setScale(0.5,0.5); //issue here console.log('check: 4'); this.physics.add.collider(this.state.state.mass[universe.sys.mass[i].id].sprite, this.state.state.playerMass[this.state.id].sprite, function(mass, player) { mass.destroy(); player.setScale(player.scaleX + 0.03); let camera = this.cameras.main; camera.zoomTo(camera.zoom * 0.975); }, null, this); }función utilizada para crear la "masa" en utils.js:
genMass(id,x,y,tex) { console.log(`creating sprite with operands: ${id},${x},${y},${tex}`); let sprite = this.scene.physics.add.sprite(50,50,tex)//needs to be a physics object if(id.substring(0,5)=='mass:') { console.log(`is equal`) } id.substring(0,4)=='mass:'? this.scene.state.state.mass[id] = {id:id,sprite:sprite,x:x,y:y}: this.scene.state.state.playerMass[id] = {id:id,sprite:sprite,x:x,y:y}; //generate an extra parameter argument for quantified mass console.log('check: 0'); id.substring(0,4)=='mass:'? this.scene.physics.world.enable(this.scene.state.state.mass[id].sprite): this.scene.physics.world.enable(this.scene.state.state.playerMass[id].sprite); console.log('check: 1'); id.substring(0,4)=='mass:'? this.scene.state.state.mass[id].sprite.body.collideWorldBounds = true: this.scene.state.state.playerMass[id].sprite.body.collideWorldBounds = true; console.log('check: 2'); }todo primero aparece mal en el primer fragmento de código donde se comenta "problema aquí". Como estoy usando un paquete web, los archivos incluidos son de poca ayuda. consola:
Player ID returned:null bundle.min.js:1 connected to game bundle.min.js:1 mass? "mass:3961482" bundle.min.js:1 mass:7107097 19134 14999 arc_purple bundle.min.js:1 creating sprite with operands: mass:7107097,19134,14999,arc_purple bundle.min.js:1 is equal bundle.min.js:1 check: 0 bundle.min.js:1 check: 1 bundle.min.js:1 check: 2 bundle.min.js:1 check: 3 {} bundle.min.js:1 Uncaught TypeError: Cannot read properties of undefined (reading 'sprite') at Q.<anonymous> (bundle.min.js:1:978636) at Qiemit (bundle.min.js:1:40837) at Q.emitEvent (bundle.min.js:1:969227) at Q.onevent (bundle.min.js:1:969030) at Q.onpacket (bundle.min.js:1:968708) at et.i.emit (bundle.min.js:1:40837) at et.ondecoded (bundle.min.js:1:973286) at qiemit (bundle.min.js:1:40837) at q.add (bundle.min.js:1:964368) at et.ondata (bundle.min.js:1:973261)Preguntas:
¿Por qué el objeto que creé está vacío al iniciar sesión? ¿Cómo puedo crear con éxito el objeto y acceder a él?
Notas:
Tengo sospechas de que es algún tipo de comportamiento de devolución de llamada que no puede inicializar algo y acceder a él en la misma devolución de llamada. soy relativamente nuevo y quiero aprender gracias.
Dos cosas de las que hablamos en la sección de comentarios.
Su subcadena necesitaba incluir los dos puntos para pasar la prueba para crear un objeto de tipo masa.
No se creó el objeto para playerMass.
Estás en el camino correcto.