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

288
Vistas
JS, Socket.io, Phaser3, objeto no creado

Soy un novato de JS, Phaser3 y Socket.io y tengo muchas ganas de aprender.

Contexto del código:

  • Phaser3
  • Zócalo.io
  • Cargando el estado de la sala de juegos antes de que se conecte el enchufe
  • Generando los NPC's y jugadores
  • falla cuando hay un intento de acceder al sprite (masivo) de NPC en la misma devolución de llamada que se creó

Asunto:

  • No se puede acceder a la propiedad del sprite y, en general, parece que el objeto no se creó en primer lugar

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.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Dos cosas de las que hablamos en la sección de comentarios.

  1. Su subcadena necesitaba incluir los dos puntos para pasar la prueba para crear un objeto de tipo masa.

  2. No se creó el objeto para playerMass.

Estás en el camino correcto.

over 4 years ago · Santiago Trujillo 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