将Cannon.JS身体移向动态位置?

时间:2018-03-29 21:37:22

标签: cannon.js

我很难绕过如何做到这一点。 我正在努力做的是,通过速度的方式将物理身体移向另一个身体,直到它到达并击中所述身体。 (想想AI跟随玩家)

以下是一个解决方案:

body.velocity.x = target.position.x-body.position.x;
body.velocity.z = target.position.z-body.position.z;

但这有问题。一个是速度更高,取决于两个物体之间的距离。我更喜欢固定的速度。另一种方法是使用以下示例:Position a body in cannon.js relative to local rotation

但在这种情况下,我需要一种旋转四元数的方法,因此它面向目标位置,这只知道物体的2个位置。

所以问题是,我如何计算身体的速度或方向,以便它可以通过使用固定的速度/速度跟随并与目标身体发生碰撞?

1 个答案:

答案 0 :(得分:0)

要获得固定速度,.normalize()您的速度矢量,然后按您想要的速度缩放(.mult())结果。结果将是一个始终具有所需长度的矢量。

要获得使您的身体朝向某个方向的四元数,您可以使用Quaternion.setFromVectors(u,v)。此方法创建一个四元数,它将旋转u,使其指向与v相同的方向。如果您将u设置为前向矢量并将v设置为您希望身体看起来的方向,那么您将获得正确的"查看"行为。请注意"转发"矢量可能与你的游戏不同。

// Compute direction to target
var direction = new CANNON.Vec3();
target.position.vsub(body.position, direction);
direction.y = 0;
direction.normalize();

// Get the rotation between the forward vector and the direction vector
var forward = new CANNON.Vec3(0,0,1);
body.quaternion.setFromVectors(forward, direction);

// Multiply direction by 10 and store in body.velocity
var fixedSpeed = 10;
direction.mult(fixedSpeed,body.velocity);