1

我创建了一个椭圆形 (2D),可通过拖动变形,像橡胶或果冻一样有弹性,能够与其他刚体碰撞并反弹。现在我可以通过拖动椭圆以某种方式改变它的形状。

我现在面临的问题是椭圆不会以我想要的方式变形。想要的效果是,当用户点击椭圆时,椭圆上的一个点是固定的,然后用户可以拖动椭圆,使其变长变细(球的总大小不变)。发生这种情况时,椭圆应该保持在其初始位置。

目前,我还没有找到一种方法可以在椭圆形发生拉伸时将其固定在某个位置。

有没有办法用 LiquidFun 达到这样的效果?如果是这样,你对如何去做有什么建议吗?如果没有,我将非常感谢任何其他建议。

4

1 回答 1

1

是的。它是一个固体弹性粒子群。看:

http://google.github.io/liquidfun/

并选择 Elastic Particles 以查看它的实际效果。示例代码在这里:

https://github.com/google/liquidfun/blob/master/liquidfun/Box2D/Testbed/Tests/ElasticParticles.h

创建粒子组如下所示:

        b2CircleShape shape;
        shape.m_p.Set(-1, 3);
        shape.m_radius = 0.5f;
        b2ParticleGroupDef pd;
        pd.flags = b2_elasticParticle;
        pd.groupFlags = b2_solidParticleGroup;
        pd.shape = &shape;
        pd.color.Set(0, 255, 0, 255);
        m_particleSystem->CreateParticleGroup(pd);

您必须在 Box2D 中制作椭圆形而不是圆形。AFAIK,Box2D 不支持将椭圆作为核心形状,因此您可能需要使用具有许多边的 b2PolygonShape 进行近似。边缘的总数可能并不重要,因为无论如何它都会被“光栅化”成粒子。

于 2014-09-17T20:22:28.483 回答