box2d,其中一个接触的夹具是OTHER夹具?

时间:2014-01-01 22:48:10

标签: c++ box2d

当我这样做时

_body->GetContactList()->contact->GetFixtureA() 

GetFixtureB() 

B是否有可能永远是另一个夹具? (不是我的,不是那个我要求联系人名单的人。)

当我在调试器中检查它时 - 它总是B,但我在box2d docs或其他地方没有遇到关于它的确切信息。

强行通过我的类的大型层次结构非常无聊,我每次都放入体内UserData,对于这个联系人中的两个灯具只是为了弄清楚哪一个是另一个正文。

1 个答案:

答案 0 :(得分:1)

简答

没有

长答案

我已经确认以下语句 总是如此,至少在Cocos2D v2.1发行版附带的Box2d版本中是这样(2.2.1 ):

// Not always TRUE:
(_body->GetContactList()->contact->GetFixtureA()->GetBody() == _body)

您可以通过创建虚拟联系人侦听器来检查:

#import "b2WorldCallbacks.h"

class MyContactListener : public b2ContactListener
{
    void BeginContact(b2Contact* contact) {
        b2Fixture* fixtureA = contact->GetFixtureA();
        b2Body *bodyA = fixtureA->GetBody();
        b2Body *bodyA_A = bodyA->GetContactList()->contact->GetFixtureA()->GetBody();

        NSLog(@"%p, %p, %p", fixtureA, bodyA, bodyA_A);

        b2Fixture* fixtureB = contact->GetFixtureB();
        b2Body *bodyB = fixtureB->GetBody();
        b2Body *bodyB_A = bodyB->GetContactList()->contact->GetFixtureA()->GetBody();

        NSLog(@"%p, %p, %p", fixtureB, bodyB, bodyB_A);
    }
};

你会发现bodyA_A == bodyB_A,而不是(bodyA == bodyA_A) && (bodyB == bodyB_A),正如你所假设的那样。遗憾!