我在使用box2d as3的b2ContactListener类时遇到了问题。我有一个名为ContactListener的类,它扩展了b2ContactListener并覆盖了PostSolve方法。PostSolve需要两个参数,contact保存有关接触的两个对象的信息,impulse保存有关接触的信息。我使用impulse参数来决定两个对象碰撞的强度,然后相应地应用伤害。
问题在于: 如果我制作任何圆形物体,并让它在我设置为地面的静态物体上缓慢滚动,然后在地面的任何位置放下一个相当大的物体,那么在运动中的圆形将接触到一种重复的脉冲,这种脉冲对于仅仅是滚动而言过于强大。这会导致滚动的圆形物体在不应该破裂时破裂。
这几乎就像是它在震动静态物体并对数百米之外的物体造成巨大的损坏,但它只影响圆形。
有人能解释一下这种情况吗?这是已知的问题吗?有解决办法吗?
我正在使用Box2DAs3版本2.1a。 更新: 一旦物体进入这种奇怪的状态,应用过多的伤害,任何接触它的圆形都会产生大量的冲力。一旦非圆形物体接触到物体,它就不再有问题了。这个问题不仅存在于静态对象上,还存在于动态和运动学对象上。 更新: 我把问题进一步缩小了。当大物体的平坦边缘撞击我的地面物体时,接触侦听器会出现问题,应用质量冲量。任何醒着的、接触地面的物体都将得到大量的PostSolve方法调用,不仅仅是圆形。我试着在一个圆形在地面上滚动时,让一个尺寸为11像素乘以11像素的盒子掉到地上。错误没有发生。然而,如果盒子是12×12,则会出现错误。如果我将一个尺寸为12×12的盒子旋转0.1度,错误就不会发生。需要有足够大的接触面积才能重现这个问题。盒子的密度对任何东西都没有影响。如果盒子是一个宽度为10,高度为100的矩形,那么错误将重现。好像只有物体的大小引起了错误,可能不是接触面积的大小。
问题在于: 如果我制作任何圆形物体,并让它在我设置为地面的静态物体上缓慢滚动,然后在地面的任何位置放下一个相当大的物体,那么在运动中的圆形将接触到一种重复的脉冲,这种脉冲对于仅仅是滚动而言过于强大。这会导致滚动的圆形物体在不应该破裂时破裂。
这几乎就像是它在震动静态物体并对数百米之外的物体造成巨大的损坏,但它只影响圆形。
有人能解释一下这种情况吗?这是已知的问题吗?有解决办法吗?
我正在使用Box2DAs3版本2.1a。 更新: 一旦物体进入这种奇怪的状态,应用过多的伤害,任何接触它的圆形都会产生大量的冲力。一旦非圆形物体接触到物体,它就不再有问题了。这个问题不仅存在于静态对象上,还存在于动态和运动学对象上。 更新: 我把问题进一步缩小了。当大物体的平坦边缘撞击我的地面物体时,接触侦听器会出现问题,应用质量冲量。任何醒着的、接触地面的物体都将得到大量的PostSolve方法调用,不仅仅是圆形。我试着在一个圆形在地面上滚动时,让一个尺寸为11像素乘以11像素的盒子掉到地上。错误没有发生。然而,如果盒子是12×12,则会出现错误。如果我将一个尺寸为12×12的盒子旋转0.1度,错误就不会发生。需要有足够大的接触面积才能重现这个问题。盒子的密度对任何东西都没有影响。如果盒子是一个宽度为10,高度为100的矩形,那么错误将重现。好像只有物体的大小引起了错误,可能不是接触面积的大小。
更新:这里是我在Box2D论坛上发布的带有源代码示例的swf链接。