Java和Box2D - 应该将哪个主体视为子弹?

时间:2016-12-25 22:57:48

标签: java box2d game-physics

我正在使用java和box2D(来自libgdx)创建游戏。

此刻我有一个问题,当图像的红色身体下降时,有时它不会击中平台(这也是一个动态的身体)因为它以高速度下降并且碰撞检测不连续。

enter image description here

我的问题是,因为这两个对象都是动态的而且我想确保检测到红体的平台之间的碰撞我应该将两个物体都设置为子弹体吗?只有红色的身体?或者只是平台?

备注:

  • 红色身体以非常高的速度坠落

  • 平台不会高速移动

谢谢你,祝圣诞快乐!

1 个答案:

答案 0 :(得分:0)

我为红色机身启用了子弹模式,并为平台机身关闭了子弹模式。

至少在Box2D 2.3.2的C ++ CCD代码中(见b2World::SolveTOI),将审查给定时间步的所有联系人是否需要为他们进行CCD处理。基本上具有子弹启用体或具有非动态体(静态或运动体)的接触在CCD过程中继续。因此,启用的子弹越少,该方法就越快完成。

因此,在红色机身和平台机身上启用子弹模式并不是最佳(通过算法说话),尽管仅使用3个绘制的机体,性能差异不太明显。鉴于你只关心红体和平台之间的碰撞,启用子弹就足以让他们继续进行CCD处理。

至于为什么我的子弹启用了红色(而不是平台),这是因为,正如你所述,它将移动两者中最快的一个并匹配用子弹概念在我的脑海中更好。

请注意,如果 - 比如将来 - 你最终会拥有更多平台,并且平台本身需要无法通过彼此隧道,但你注意到它们是隧道(即使速度较慢),然后启用平台(而不是红色的身体)将是我去的方式。