检测Box2d和libgdx(android)中两个物体之间的碰撞

时间:2014-04-10 13:00:53

标签: android libgdx box2d

我是libgdx和Box2d引擎的新手,我正在开发一个使用它的游戏。我想检测两个物体之间的碰撞以执行某些功能。但是我不知道这样做的最佳方式也想要得到碰撞点。用代码提供一些建议。我已经实现了ContactListener,但无济于事。

我正在使用this代码作为参考。

由于

1 个答案:

答案 0 :(得分:6)

您已经以正确的方式创建并设置了ContactListener ...(对于常规设置,libgdx wiki很棒:https://github.com/libgdx/libgdx/wiki/box2d#contact-listeners

如果您现在想要处理特定的联系人,那么您需要在侦听器的beginContact();方法中添加一些实现。 beginContact();方法包含Contact个实例,它可以满足您的所有需求:

  • FixtureA - 联系人的第一个夹具
  • FixtureB - 夹具,FixtureA与
  • 相撞
  • WorldManifold - 保存碰撞点等的对象

通过灯具,您可以访问正在绘制的实体和演员。与Actor的连接可以通过body.setUserData(actor);方法完成。

现在您需要决定如何找出正确的碰撞。您可以使用传感器,这些传感器只是作为传感器的box2d灯具。这意味着当一个物体与一个传感器发生碰撞时,它不会反弹,而是会反过来掉落。但是,您可以在侦听器中检测到此联系人。

此外,向actor添加某种GameObjectType可能是个好主意。想象一下,你创造了一个跳跃游戏,玩家从平台跳到平台,下面有水。然后你会用PLAYER,WATER,PLATFORM等类型创建你的演员......通过box2d体的getUserData()方法你现在可以访问Actors并比较它们的类型。

E.g。当一个类型PLAYER的演员与一个类型的水碰撞时,他会淹死......

希望它有所帮助...