【问题标题】:How to create whirlpool/vortex effect?如何创建漩涡/漩涡效果?
【发布时间】:2014-09-19 18:55:38
【问题描述】:

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

【问题讨论】:

    标签: java libgdx box2d whirlpool blackhole


    【解决方案1】:

    如果您所说的“自旋”是指下落的物体将沿着曲线或螺旋线移动,而不是立即改变运动方向朝向黑洞,则有一个简单的解决方法。

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

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

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

    当你有从你的身体到黑洞的向量(计算为black hole position - body position)时,向量的长度就是距离,在归一化和乘以力之后,你就有了想要的forceX和@ 987654325@ 每次更新都需要对身体施加的力矢量,只要它保持在孔的范围内。

    但是,这个公式会导致随着身体靠近洞口而使力增长到无穷大,所以如果这会导致任何问题,您可以尝试更改为线性转换(最接近 = 1,最远 = 0)。

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

    【讨论】:

    • 也可以使用方便的Body#applyForceToCenter()方法。
    【解决方案2】:

    您想要实现一个切向力,其大小向涡流中心增加。

    这是一些伪代码。

    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);
    
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多