Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

182
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda