所以我正在开发一款名为 Star Commander 的太空游戏。
进展非常顺利,直到我决定我需要实现某种物理。我主要需要 Farseer Physics 进行碰撞检测。
无论如何,因为这是一个太空游戏,所以当我声明我的“世界”对象时:
private World world;
this.world = new World(Vector2.Zero);
我没有重力。这会导致奇怪的结果。我可以与物体发生碰撞,但一旦我停止与它们碰撞,就是这样。我不能再与他们发生碰撞,我会直接穿过他们。然而,在重力作用下:
private World world;
this.world = new World(new Vector2(0F, 1F));
碰撞效果很好。
我试过四处寻找有关 Farseer 的帮助,但很多帖子都过时了,而且没有真正好的信息来源,可悲的是,我很确定我也不会在这里得到我需要的帮助。
我环顾四周时发现的唯一一件事是,对于名为“Geoms”的对象,我需要禁用一个名为“CollisionResponeEnabled”或类似的属性。
然而 Geom 对象在 Farseer Physics 3 中不再存在,并且完全被 Fixtures 取代。然而,灯具似乎没有这个属性。
我可以提供任何可能有帮助的源代码,但请记住,我仍在将物理引擎实现到我的项目中,并且很多代码都不是最终的并且有点混乱。
重要编辑:
在录制了一个简短的 gif 来演示我的问题后,我发现我只能与一个对象碰撞一次,要再次与它碰撞,我必须与另一个对象碰撞,但直到我与一个对象碰撞后才能与该对象发生碰撞不同的对象。
例子: