CANNON.js: 检查一个物体是否被约束

CANNON.js: check if a body is being constrained

我一直在尝试使用 javascript 制作多人游戏(大部分在服务器上,使用 Node.js);我想要制作的核心机制之一是玩家将能够设计自己的战斗风格(包括他们挥剑的方式等)。问题是我找不到任何简单的方法来限制玩家的移动。

我首先尝试编写一种方法来检查然后限制玩家的风格,这样看起来他们不会同时折断每条肢体,但这并没有真正奏效。然后我发现了很棒的 CANNON.ConeTwistConstraint,但是在查看文档后我发现 CANNON.js 的约束似乎没有任何类型的内置函数来测试两个物体是否是超过约束的限制。我考虑过让我的游戏在单独的模拟中创建对象并检查是否有力作用于任一对象,但我不确定如何去做,或者是否有更好的方法。

我的问题有 simple/easier 解决方案吗?如果不是,那么 CPU 最不密集的实施上述方法的方法是什么?

您可以手动检查 ConeTwistConstraint 是否达到其极限。如果您查看方法 CANNON.ConeEquation.prototype.computeB,您会发现它使用 cos() 和点积计算约束违规 "g"。您可以简单地使用以下代码执行相同的操作。

var eq = coneTwistConstraint.coneEquation;
var g = Math.cos(eq.angle) - eq.axisA.dot(eq.axisB);
if(g > 0) {
    // Constraint limit exceeded
} else {
    // Constraint is within limits
}

使用相同的策略,您可以检查是否超过扭曲限制。由于扭曲方程是CANNON.RotationalEquation,所以代码变为:

var eq2 = coneTwistConstraint.twistEquation;
var g2 = Math.cos(eq2.maxAngle) - eq2.axisA.dot(eq2.axisB);