Java和Box2D - 哪个物体应该被视为子弹?

5
我正在使用Java和Box2D(来自libgdx)创建游戏。
目前我遇到了一个问题,当下面图片中的红色物体掉落时,由于速度过快,碰撞检测不连续,有时它并没有撞到平台(也是一个动态物体)。请看下图: box2d (译者注:原文中的“bellow”应为“below”,已更正)

enter image description here

我的问题是,由于两个对象都是动态的,我想确保检测到平台和红色物体之间的碰撞,我应该将两个物体都设置为弹性体吗?只有红色物体?还是只有平台? 注:
  • 红色物体下落速度非常快

  • 平台不以很高的速度移动

谢谢,圣诞快乐!

我从未使用过(J)Box,但是引用手册上的话:“在某些游戏场景中,您需要动态身体来使用CCD。例如,您可能想要将高速子弹射向一堆动态砖块。如果没有CCD,子弹可能会穿过砖块。”-这对我来说听起来就像是你的情况。因此,如果它可以工作且性能正常,有什么理由不将它们都设置为“bullet”呢? - Marco13
1个回答

0

我会为红色物体启用子弹模式,而对于平台物体则不启用子弹模式。

至少在Box2D 2.3.2的C++ CCD代码中(请参见b2World::SolveTOI),所有给定时间步长的接触点都将被检查,以确定是否需要对它们进行CCD处理。基本上,启用了子弹模式的物体或具有非动态物体(静态或运动学物体)的接触点将继续进行CCD处理。因此,启用子弹模式的物体越少,该方法就越快完成。

因此,在红色物体和平台物体上同时启用子弹模式并不是最优选择(从算法角度来看),尽管在只有三个绘制的物体时性能差异不太明显。而且,考虑到您只关心红色物体和平台之间的碰撞,只有一个启用子弹模式就足以使它们的接触点继续进行CCD处理。

至于为什么我会启用红色物体的子弹模式(而不是平台),那是因为,正如您所说,它将是两者中移动速度最快的,这更符合我的子弹概念。

请注意,如果在将来您拥有更多的平台,并且这些平台本身需要无法相互隧道,但您注意到它们正在隧道(即使速度较慢),那么启用平台(而不是红色主体)将是我选择的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接