如何创造漩涡/漩涡效果?

时间:2014-09-19 18:55:39

标签: java libgdx box2d whirlpool blackhole

我试图在作为传感器的圆形体上产生涡旋效果。 我一直在寻找这个,我寻找的所有例子都是用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;
}

2 个答案:

答案 0 :(得分:0)

你想要实现一个朝向涡旋中心增大的切向力。

这里有一些伪代码。

radialVector = objectPosition - vortexPosition;
tangentialVector = radialVector.perpendicularVector();

if (radialVector.length() < vortexRadius) {

    // Swirl faster when near the center of the vortex.
    // Max tangential force when distance from center is 0.
    // Min tangential force when distance from center is vortexRadius.
    forceMagnitude = map(radialVector.length(), vortexRadius, 0, minTangentialForce, maxTangentialForce);
    force = forceMagnitude * tangentialVector.normalize();
    object.applyForce(force);

}

这是一张显示矢量分量的图像:

Radial and tangential components.

要创建漩涡效果,当物体靠近中心时,应增加径向(Fr)和切向(Ft)力。

答案 1 :(得分:0)

如果通过&#34;旋转&#34;你的意思是坠落的物体会沿着曲线或螺旋线移动,而不是立即向黑洞改变运动方向,这是一个很容易解决的问题。

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

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

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

当你的身体朝向黑洞的矢量(计算为black hole position - body position)时,矢量的长度就是距离,经过标准化并乘以力后,你得到了所需的{{1并且forceX强制向量需要在每次更新时应用于正文,只要它保持在洞的范围内。

然而,当身体靠近洞时,此公式将导致力增长到无穷大,因此如果这会导致任何麻烦,您可以尝试更改为线性转换(最近= 1,farest = 0)。

forceY