About the setCategoryBitmask(int bitmask) setContactTestBitmask(int bitmask) setCollisionBitmask(int bitmask)

use those functions, how to set two body collision or no collision.
int the 3.0 rc version, the object of cpp-tests.
in the class of PhysicsContactTest:

box1->getPhysicsBody()->setCategoryBitmask(0x01); // 0001
box1->getPhysicsBody()->setContactTestBitmask(0x04); // 0100
box->getPhysicsBody()->setCollisionBitmask(0x03); // 0011

  box2->getPhysicsBody()->setCategoryBitmask(0x02);    // 0010
    box2->getPhysicsBody()->setContactTestBitmask(0x08); // 1000
    box2->getPhysicsBody()->setCollisionBitmask(0x01);   // 0001

    box3->getPhysicsBody()->setCategoryBitmask(0x04);    // 0100
    box3->getPhysicsBody()->setContactTestBitmask(0x01); // 0001
    box3->getPhysicsBody()->setCollisionBitmask(0x06);   // 0110

the box1 and box2 will be collision
but the box1 box3 will not be
the box2 box3 no collision too.

why this?

Please refer the function onContactBegin

bool PhysicsContactTest::onContactBegin(PhysicsContact& contact)
{
PhysicsBody* a = contact.getShapeA()->getBody();
PhysicsBody* b = contact.getShapeB()->getBody();
PhysicsBody* body = (a->getCategoryBitmask() == 0x04 || a->getCategoryBitmask() == 0x08) ? a : b;
CC_UNUSED_PARAM(body);
CC_ASSERT(body->getCategoryBitmask() == 0x04 || body->getCategoryBitmask() == 0x08);

return true;

}