Cocos2dx Collision : onContactBegin fired but collision check condition fail always

0

I have 3 Objects in game. Falling Ball, Upward moving Steps, Coins

Now no problem with game play, I need steps and ball collision place to add sound effects.now onContactBegin fired twice for ball and steps collision. Once contact begin onContactBegin fired, also once it loose contact then onContactBegin fired again. Now first

if ((contact.getShapeA()->getCategoryBitmask() &

statement inside onContactBegin always fail...so why not condition fail..whats wrong with my code ?

Here is Code:

#define COL_MASK_BLANK        0x00000000
#define COL_MASK_BALL         0x00000001
#define COL_MASK_STAGE        0x00000002
#define COL_MASK_COIN         0x00000004

    ball->addComponent(PhysicsBody::createCircle(ball->getContentSize().width*0.5f, PhysicsMaterial(10.0f,0.1,0.1)));
    ball->getPhysicsBody()->setGravityEnable(true);
    ball->getPhysicsBody()->setRotationEnable(false);
    ball->getPhysicsBody()->setDynamic(true);
    ball->getPhysicsBody()->setTag(BALL_BODYS_TAG);    
    ball->getPhysicsBody()->setCategoryBitmask(COL_MASK_BALL);
    ball->getPhysicsBody()->setCollisionBitmask(COL_MASK_STAGE);
    ball->getPhysicsBody()->setContactTestBitmask(0xFFFFFFFF);

    steps->addComponent(PhysicsBody::createBox(steps->getContentSize(), PhysicsMaterial(100.0f,0.1,0.1)));
    steps->getPhysicsBody()->setGravityEnable(false);
    steps->getPhysicsBody()->setTag(STEPS_BODYS_TAG);
    steps->getPhysicsBody()->setDynamic(false);
    steps->getPhysicsBody()->setCategoryBitmask(COL_MASK_STAGE);
    steps->getPhysicsBody()->setCollisionBitmask(COL_MASK_BALL+COL_MASK_COIN);
    steps->getPhysicsBody()->setContactTestBitmask(0xFFFFFFFF);

    coin->addComponent(PhysicsBody::createCircle(coin->getContentSize().width*0.5f, PhysicsMaterial(10.0f,0.1,0.1)));
    coin->getPhysicsBody()->setGravityEnable(true);
    coin->getPhysicsBody()->setTag(COIN_BODYS_TAG);
    coin->getPhysicsBody()->setCategoryBitmask(COL_MASK_COIN);
    coin->getPhysicsBody()->setCollisionBitmask(COL_MASK_BALL+COL_MASK_STAGE);
    coin->getPhysicsBody()->setContactTestBitmask(COL_MASK_BALL+COL_MASK_STAGE);
    coin->getPhysicsBody()->setDynamic(true);

onContactBegin Code:

bool GBGameScene::onContactBegin(cocos2d::PhysicsContact& contact)
{
    if ((contact.getShapeA()->getCategoryBitmask() & contact.getShapeB()->getCollisionBitmask()) == 0
        || (contact.getShapeB()->getCategoryBitmask() & contact.getShapeA()->getCollisionBitmask()) == 0)
    {
       //printf("Contact Done\n");

        PhysicsBody* bodyA = contact.getShapeA()->getBody();
        PhysicsBody* bodyB = contact.getShapeB()->getBody();

        if(bodyA->getTag() == BALL_BODYS_TAG || bodyB->getTag() == BALL_BODYS_TAG)
        {
            if(bodyA->getTag() == STEPS_BODYS_TAG || bodyB->getTag() == STEPS_BODYS_TAG)
            {
                if(bodyA->getTag() == STEPS_BODYS_TAG)
                {
                    GBSteps *steps = (GBSteps *) bodyA->getNode();
                    GBGravityBall *graBall = (GBGravityBall*) bodyB->getNode();

                    printf(“Here Controll not coming\n”);
                 }
                else
                {
                    GBSteps *steps = (GBSteps *) bodyB->getNode();
                    GBGravityBall *graBall = (GBGravityBall*) bodyA->getNode();

                    printf(”Here Controll not coming\n”);

                }
            }
            if(bodyA->getTag() == COIN_BODYS_TAG || bodyB->getTag() == COIN_BODYS_TAG)
            {
                if(bodyA->getTag() == COIN_BODYS_TAG)
                {
                     GBCoin *coins = (GBCoin*) bodyA->getNode();
                     coins->removeFromParentAndCleanup(true);
                    printf(”Here Controll coming: Working Fine\n”);

                }
                else
                {
                    GBCoin *coins = (GBCoin*) bodyB->getNode();
                    coins->removeFromParentAndCleanup(true);
                    printf(”Here Controll coming: Working Fine\n”);

                }
            }
        }
    }
    return true;
}

Why not control not come to ball and steps collision detection place ?

c++
ios
iphone
xcode
cocos2d-x
asked on Stack Overflow Mar 16, 2020 by Guru • edited Apr 1, 2020 by Guru

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0