我创造了一个椭圆形(2D),通过拖动可变形,像橡胶或果冻一样有弹性,能够与其他刚体碰撞并反弹。现在我可以通过拖动椭圆来改变它的形状。
我现在面临的问题是椭圆形不会以我想要的方式变形。期望的效果是当用户敲击椭圆形时椭圆上有一个点固定,然后用户可以拖动椭圆形,使其变得更长更薄(球的总尺寸不会改变)。当发生这种情况时,椭圆应该保持在其初始位置。
目前,我还没有找到一种方法,可以在拉伸形状时将椭圆固定在某个位置。
有没有办法用LiquidFun实现这样的效果?如果是的话,你对如何去做有什么建议吗?如果没有,我会非常感谢任何其他建议。
答案 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来近似。边缘的总数可能非常重要,因为它将被光栅化"无论如何,进入粒子。