我创建了几个类,在libGDX中使用Box2D (特别是类似于这些链接的圆和长方形 )创建软体对象。
物体由多个圆形Box2D体(下称变形点)构成,通过距离连接连接在一起,使物体在变形点移动时“变形”。当物体与其他标准的Box2D刚体(如盒多边形)碰撞时,碰撞工作得差不多很好:
当两个柔软的物体碰撞时,问题就开始了。正如您可能从它们的构造方式中猜测的那样,由于Box2D处理碰撞的变形点很小,并且间隔很小,所以它们很容易就不会在两个软体应该碰撞的时候发生碰撞。如果这两个物体被放置在下面的图像中的左边,圆圈穿过正方形,而不是像它应该的那样从它的顶部反弹:
我试着解决这个问题(下面所示的方法),方法是对身体进行更多的细化,这样变形点就更靠近了(左),这看起来太耗费资源了,而且影响也不大。然后,我试着扩大变形点的大小以填补空白(中间),这对于碰撞非常有效,但是正如你所看到的,因为纹理看起来没有碰撞,所以将纹理映射到对象会造成问题。在此之后,我试图用旋转关节连接变形点之间的多边形物体来绑定物体的外部,这样可以更好地配合纹理,防止物体彼此通过,但它阻止了物体的适当变形。
我想不出更多的方法来解决这个问题,但是我对Box2D和libGDX非常陌生,也许我忽略了一个更简单的解决方案。我会给任何想法一个机会。
发布于 2015-09-24 06:56:43
如果中间的纹理在物理上起作用,唯一的问题是将纹理映射到变形点(由于变形点不考虑软体的外部边缘),难道不可能将纹理映射到与变形点相抵的点吗?
尝试锁定变形点的旋转,您可以将fixedRotation
设置为BodyDefinition
上的true
,然后将每个变形点与从变形点中心到纹理映射点的偏移量Vector2
相关联。除非您已经在使用它,否则可以使用setUserData
将偏移量矢量存储在变形点上。
https://gamedev.stackexchange.com/questions/108758
复制相似问题