我遇到了 box2d as3 b2ContactListener 类的问题。我有一个名为 ContactListener 的类,它扩展了 b2ContactListener 并覆盖了 PostSolve 方法。PostSolve 采用 2 个参数,contact 保存有关 2 个有联系的对象的信息,以及 impulsion 保存有关联系的信息。我使用脉冲参数来决定 2 个物体的撞击强度,然后我相应地施加伤害。
问题是:如果我做任何圆形的东西,让它在我作为地面的静止物体上慢慢滚动,然后将一个相当大的物体放在地面上的任何地方,圆形在运动时会接触到重复只是滚动的冲动太大了。它会导致滚动的圆形物体在不应该的时候破裂。
几乎就像是震动了静止的身体,对数百米外的物体造成了巨大的伤害,但它只作用于圆圈。
任何人都可以说明情况吗?这是一个已知的问题?解决方法?
我正在使用 Box2DAs3 2.1a 版。
更新:一旦身体进入这种施加大量伤害的怪异状态,任何接触到它的圆圈都会产生大量的大脉冲。一旦非圆形的东西与身体接触,它就不再有问题了。此外,这个问题不仅存在于静态对象上,还存在于动态和运动学上。
更新:我进一步缩小了问题的范围。当一个大物体的平坦边缘撞击我的地面物体时,接触听众会吓坏并施加质量脉冲。任何醒着并接触地面的对象,不仅仅是圆圈,都会得到大量的 PostSolve 方法调用。我尝试将一个大小为 11 像素 x 11 像素的盒子放到地上,同时一个圆圈在地上滚动。该错误没有发生。但是,如果框是 12 x 12,则确实会发生错误。此外,如果我将大小为 12 的框旋转 12 到 0.1 度,则不会发生错误。需要有足够大的接触区域才能复制。盒子的密度也不会影响任何事情。此外,如果该框是一个宽度为 10 且高度为 100 的矩形,并且该错误将重现。这几乎就像是对象的大小导致了这个错误,
更新:这是我制作的 Box2D 论坛帖子的链接,其中包含带有源代码的示例 swf。