【问题标题】:Collision Detection using Box2d(for Android)?使用 Box2d(适用于 Android)进行碰撞检测?
【发布时间】:2012-02-15 14:35:07
【问题描述】:

有人可以解释一下使用box2d for android进行碰撞检测的方式是什么。我无法理解 BBContactListener 的工作方式。

BBContactListener listener = new BBContactListener();
world = new BBWorld(gravity, doSleep);
world.SetContactListener(listener);

如何使用那个监听器?我应该扩展标准以创建自己的还是如何?

【问题讨论】:

    标签: java android box2d collision


    【解决方案1】:

    我没有为 android 使用 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:每次碰撞时 b2World 都会自动调用这些方法。但是请注意,您无法在这些方法中执行所有您想要的操作,因为它们是在 b2World::Step 函数执行期间调用的。因此,例如,您无法在此函数中创建或删除主体
    • 所以正如我所见,这些方法是为了实现反射或类似的东西。在联系期间我应该在哪里删除对象? p.s.真的谢谢你的信息,因为什么都找不到)
    • @GeorgeBuron:反射是什么意思?您必须将有关要删除的对象的信息存储在某处。并在 Step 函数完成后删除它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    相关资源
    最近更新 更多