我的Java应用程序需要用于水平世界的2d物理引擎,但是,从jbox2d和dyn4j来看,它们似乎并没有提供我需要的现成的东西。具体而言,它们不支持定义哪些对象组可以与其他对象组碰撞。考虑这个简化的模型:项目符号可能与盒子碰撞。飞机穿过盒子,但它们可能与子弹相撞。
如何排除某些对象组与物理引擎碰撞?
最佳答案
Dyn4j具有CategoryFilter。您创建具有两个long的CategoryFilters并将其设置在Fixtures中。过滤器的工作原理有点有趣,因为类别和掩码以其二进制形式用于确定谁可以与谁发生冲突。要在实践中查看此信息,请从Dyn4j存储库中查看此@Test。
Dyn4j在docs中也提到了这一点:
提供了三种Filter实现,即Filter.DEFAULT_FILTER,CategoryFilter(类似于Box2D的碰撞过滤器,int category + mask)和TypeFilter。
所以我假设Box2D也有这个(扩展名为jBox2d)。我想说,Box2D或Dyn4j级别的任何物理引擎都将以某种形式具有这种能力。