使用Box2d进行碰撞检测(针对Android)?

4
有人能解释一下在Android中如何使用Box2D进行碰撞检测吗?我无法理解BBContactListener是如何工作的。
BBContactListener listener = new BBContactListener();
world = new BBWorld(gravity, doSleep);
world.SetContactListener(listener);

如何使用那个监听器?我应该扩展标准来创建自己的监听器吗?
1个回答

1

我没有在安卓中使用过box2d,但是我认为这个思路对于安卓来说也是一样的。你必须要实现接触处理方法。这就是在C++中做到它的方法。

class ContactListener : public b2ContactListener
{
public:
    ContactListener();
    ~ContactListener();

    void BeginContact(b2Contact *contact) {...}
    void EndContact(b2Contact *contact) {...}
    void PreSolve (b2Contact *contact, const b2Manifold *oldManifold) {...}
    void PostSolve (b2Contact *contact, const b2ContactImpulse *impulse) {...}
};

然后只需将此类传递给 `b2World'


据我理解,我需要创建我的监听器,实现方法,然后在监听器中创建myb2World属性,激活监听器(myb2World.SetContactListener(this))。那么所有与可视对象的操作(碰撞、冲量等)都将在这4个方法中实现? - GeorgeBuron
@GeorgeBuron:这些方法将被b2World自动调用以处理每个碰撞。但请注意,由于它们是在b2World::Step函数执行期间调用的,因此您无法在这些方法中执行所有所需操作。例如,在这些函数中无法创建或删除物体。 - Andrew
所以我看这些方法是用来实现反射或类似的东西。那么在接触期间应该在哪里删除对象呢?顺便说一句,非常感谢您提供的信息,因为我找不到任何相关资料。 - GeorgeBuron
@GeorgeBuron:什么是反射?你必须在某个地方存储关于要删除的对象的信息。并在 Step 函数完成后将它们删除。 - Andrew

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