我的碰撞检测函数:
void GameContactListener::PostSolve(b2Contact* contact,
const b2ContactImpulse* impulse)
{
//contact->SetEnabled(false);
int count = contact->GetManifold()->pointCount;
float maxImpulse = 0.0f;
for ( int i = 0; i < count; ++i )
maxImpulse = b2Max(maxImpulse, impulse->normalImpulses*);
{
b2Body* bodyA = contact->GetFixtureA()->GetBody();
b2Body* bodyB = contact->GetFixtureB()->GetBody();
NodeBase* nodeBaseA = (NodeBase*)bodyA->GetUserData();
NodeBase* nodeBaseB = (NodeBase*)bodyB->GetUserData();
contact->setEnable(false);
//BeginContact(contact);
//bird & bird
if ( nodeBaseA != NULL && nodeBaseB != NULL && nodeBaseA->GetPropsType() == nodeBaseB->GetPropsType()
&& nodeBaseA->GetPropsType() == EPropsType_Bird )
return;
//grass & grass
if ( nodeBaseA != NULL && nodeBaseB != NULL && nodeBaseA->GetPropsType() == nodeBaseB->GetPropsType()
&& nodeBaseA->GetPropsType() == EPropsType_Grass )
return;
//grass & ground
if ( bodyA != NULL && bodyA != NULL &&
((nodeBaseA != NULL && nodeBaseA->GetPropsType() == EPropsType_Grass && nodeBaseB == NULL) ||
(nodeBaseB != NULL && nodeBaseB->GetPropsType() == EPropsType_Grass && nodeBaseA == NULL)) )
return;
if ( nodeBaseA != NULL )
{
if ( nodeBaseA->GetPropsType() == EPropsType_Wood)
{
if(nodeBaseB != NULL && nodeBaseB->GetPropsType()==EPropsType_Bird)
{
{
contact->setEnable(false);
........................
}
}
}
if ( nodeBaseA->GetPropsType() == EPropsType_Wood || nodeBaseA->GetPropsType() == EPropsType_LockBird || nodeBaseA->GetPropsType() == EPropsType_Grass ) //|| nodeBaseA->GetPropsType() == EPropsType_Grass ;
{
contact->setEnable(false);
.........
}
else if ( nodeBaseA->GetPropsType() == EPropsType_Bird )
{
contact->setEnable(false);
.........
}
}
if ( nodeBaseB != NULL )
{
if ( nodeBaseB->GetPropsType() == EPropsType_Wood)
{
if(nodeBaseA != NULL && nodeBaseA->GetPropsType()==EPropsType_Bird)
.....................
}
}
if ( nodeBaseB->GetPropsType() == EPropsType_Wood || nodeBaseB->GetPropsType() == EPropsType_Grass ) //|| nodeBaseB->GetPropsType() == EPropsType_Grass;
{
..........................
}
else if ( nodeBaseB->GetPropsType() == EPropsType_Bird )
{
..............
}
}
}
}
我在每个判断中都加入过这句话, 想屏蔽碰撞, 但是还是会检测碰撞, 这是什么问题? 要在begincontact使用这个函数吗?
*