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

186
Vistas
Matter.js Aplicar fuerza sobre el cuerpo usando ángulo y nivel de potencia

Actualmente estoy tratando de aplicar fuerza a un cuerpo usando un grado (un flotador entre -90 y 90) y un nivel de fuerza (un flotador entre 0 y 1). Body.applyForce() solo me permite proporcionar niveles de potencia x e y.

Lo que estoy tratando de lograr:

Quiero poder arrastrar hacia atrás desde una posición y hacer que mi cuerpo se lance hacia otras direcciones con la potencia del lanzamiento en función de cuánto arrastró hacia atrás el usuario.

Aquí está mi código para obtener el ángulo y el nivel de potencia.

 var cachedPosition = { x: 0, y: 0 }; document.addEventListener("mousedown", (e) => { cachedPosition.x = e.clientX cachedPosition.y = e.clientY }) document.addEventListener("mouseup", (e) => { var degree = "INVALID"; var difX = cachedPosition.x - e.clientX var difY = cachedPosition.y - e.clientY if (difX > 0 && difY < 0) { var degree = getDegree(difX, difY) } if (difX < 0 && difY < 0) { var degree = -getDegree(Math.abs(difX), difY); // Negative degree if drag is towards bottom right. } var power = Math.sqrt(Math.pow(difX, 2)+Math.pow(difY, 2))/1000 })
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Se me ocurrió una solución muy poco elegante, pero funcional.

 if (degree > 0) { if (degree < 25) { Body.applyForce(character, character.position, { x: power * (degree / 45), y: -0.4, }) } else if (degree > 45) { Body.applyForce(character, character.position, { x: power / (degree / 45), y: -power * (degree / 45) }) } else if (degree < 45) { Body.applyForce(character, character.position, { x: power * (degree / 45), y: -power / (degree / 45) }) } else if (degree == 45) { Body.applyForce(character, character.position, { x: power, y: -power }) } } else { if (-degree < 25) { Body.applyForce(character, character.position, { x: power * (degree / 45), y: -0.4 }) } else if (-degree > 45) { Body.applyForce(character, character.position, { x: power / (degree / 45), y: power * (degree / 45) }) } else if (-degree < 45) { Body.applyForce(character, character.position, { x: power * (degree / 45), y: power / (degree / 45) }) } else if (-degree == 45) { Body.applyForce(character, character.position, { x: power, y: -power }) } }

La potencia para el valor x e y se multiplica o divide dependiendo de si el degree se inclina hacia 0 o 90 grados utilizando la diferencia porcentual entre el degree y los 45 grados, que es el "medio". He agregado excepciones para cualquier grado inferior a 25, en caso de que power sea demasiado alta y haga que el cuerpo vuele demasiado alto. En ese caso, acabo de establecer un valor de límite y de -0.4

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