我试图在作为传感器的圆形物体上产生漩涡效果。
我一直在寻找这个,我寻找的所有示例都是C ++或Objective C,但我似乎翻译的并不好。

当我的对象归类时,它将调用beginContact(..)并设置一个标志,以便我可以调用bodyToUpdate.applyForce(...);

 public void beginContact(Contact contact) {
             setColliding(true);
 }

 //updating collition every frame
 public void act(){
     if (colliding) {
        ball.getBody().applyForce(....);

 }


如何计算施加于每个框架以使其涡旋的力大小?

编辑:

所以我现在使物体直接到达涡旋中心,但是没有“旋转”

public void act() {
    if (colliding) {
        ball.getBody().setLinearVelocity(0, 0);

        ball.getBody().applyForce((portal.getBody().getPosition().x - ball.getBody().getPosition().x) * i,
                (portal.getBody().getPosition().y - ball.getBody().getPosition().y) * i,
                ball.getBody().getPosition().x, ball.getBody().getPosition().y, true);

        i++;
    } else
        i = 10;
}

最佳答案

如果“旋转”是指下落的物体将沿着曲线或螺旋线移动,而不是立即更改向黑洞的移动方向,则可以轻松解决此问题。

ball.getBody().setLinearVelocity(0, 0);


这完全停止了身体的当前运动。我将从删除该行开始。另外,为了获得更好的逼真的行为,您可以按照正确的公式来计算吸引力,如下所示:

force = mass1 * mass2 * [some constant] / (distance ^ 2)


当向量具有从身体到黑洞的距离(计算为black hole position - body position)时,向量的长度即为距离,并且在对力进行归一化并乘以后,便得到了所需的forceXforceY力只要它保持在孔的范围内,每次更新都需要应用到该向量的矢量。

但是,此公式将使力随着物体靠近孔而增大到无穷大,因此,如果造成任何麻烦,您可以尝试更改为线性转换(最接近= 1,最接近= 0)。

force = mass1 * mass2 * [some constant] * ( (maxDistance - distance) / maxDistance )

10-08 07:05