当我这样做时
_body->GetContactList()->contact->GetFixtureA()
或
GetFixtureB()
B是否有可能永远是另一个夹具? (不是我的,不是那个我要求联系人名单的人。)
当我在调试器中检查它时 - 它总是B,但我在box2d docs或其他地方没有遇到关于它的确切信息。
强行通过我的类的大型层次结构非常无聊,我每次都放入体内UserData,对于这个联系人中的两个灯具只是为了弄清楚哪一个是另一个正文。
答案 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)
,正如你所假设的那样。遗憾!