box2D + LiquidFun实现果冻效果

时间:2014-09-17 01:23:32

标签: box2d jelly liquidfun

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

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

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

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

1 个答案:

答案 0 :(得分: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来近似。边缘的总数可能非常重要,因为它将被光栅化"无论如何,进入粒子。