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 ?
User contributions licensed under CC BY-SA 3.0