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

104
Vistas
Problema de detección de colisión de Javascript

Tengo una clase con este método de detección de colisión:

 wallCollisionDetection(){ if((this.position.x >= canvasWidth-this.radius) || (this.position.x <= this.radius) ){ this.speed.x = -this.speed.x } if((this.position.y >= canvasHeight-this.radius) || (this.position.y <= this.rafius) ){ this.speed.y = -this.speed.y } }

Bastante simple y funciona. De vez en cuando (rara vez pero aún así), cuando la partícula golpea una pared vertical, tiende a moverse verticalmente, pegada a esa pared. Lo mismo, cuando golpea una pared horizontal (entonces tiende a moverse solo horizontalmente).

Como referencia, si genero 200 partículas y las dejo moverse aleatoriamente durante 5 minutos, un promedio de 2 de ellas quedarán atrapadas en una dirección.

Creo que este ejemplo de código debería ser suficiente ya que no arroja ningún error. Así que creo que solo me falta alguna condición adicional en ese método. Pero si consideras que necesitas más, solo pídelo.

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

0

Ok, scunliffe me mostró el camino. Parece que cuando una partícula sobrepasa el límite, permanece atrapada en un bucle infinito "si".

Así que así es como lo resolvió (básicamente, acabo de establecer la posición en su valor máximo/mínimo permitido para que no ocurra el bucle):

 wallCollisionDetection(){ if(this.position.x > canvasWidth-this.radius){ this.position.x = canvasWidth-this.radius; this.speed.x = -this.speed.x } else if(this.position.x < this.radius){ this.position.x = this.radius this.speed.x = -this.speed.x } if(this.position.y > canvasHeight-this.radius ){ this.position.y = canvasHeight-this.radius; this.speed.y = -this.speed.y } else if(this.position.y < this.radius){ this.position.y = this.radius; this.speed.y = -this.speed.y } }

No es bonita, pero funciona. ¡Gracias!

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