12

我试图对物体施加力。让它以我的鼠标位置相对于对象生成的角度移动。

我有角度

 targetAngle = Matter.Vector.angle(myBody.pos, mouse.position);

现在我需要施加一个力,让身体沿着那个角度移动。我在 applyForce 方法的以下值中输入了什么?

  // applyForce(body, position, force)

  Body.applyForce(myBody, {
    x : ??, y : ??
  },{
    x:??, y: ?? // how do I derive this force??
  });

我在此处输入 x 和 y 值以使身体沿着鼠标和身体之间的角度移动。

4

2 回答 2

8

您可以依赖该Matter.Vector模块并使用它来减去、归一化和乘以位置向量:

var force = 10;
var deltaVector = Matter.Vector.sub(mouse.position, myBody.position);
var normalizedDelta = Matter.Vector.normalise(deltaVector);
var forceVector = Matter.Vector.mult(normalizedDelta, force);
Body.applyForce(myBody, myBody.position, forceVector);
于 2018-05-22T16:39:07.303 回答
8

要施加力以使您的对象朝该方向移动,您需要以弧度为单位取角度的正弦和余弦。您只需将对象的位置作为第一个向量传递,以不施加扭矩(旋转)。

var targetAngle = Matter.Vector.angle(myBody.pos, mouse.position);
var force = 10;

Body.applyForce(myBody, myBody.position, {
  x: cos(targetAngle) * force, 
  y: sin(targetAngle) * force
});

此外,如果您需要它,文档applyForce()此处

(我知道这个问题很老,我或多或少为任何偶然发现它的人这样做)

于 2017-07-15T13:30:56.777 回答