b2contact::setEnable(false)为什么 屏蔽不了碰撞

我的碰撞检测函数:
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使用这个函数吗?
*