У меня есть 3 объекта в игре. Падающий шар, движущиеся вверх шаги, монеты
Теперь нет проблем с игровым процессом, мне нужны шаги и место для столкновения мячей, чтобы добавить звуковые эффекты. Теперь onContactBegin запускается дважды для столкновения мяча и шагов. Как только контакт начинается, onContactBegin срабатывает, также как только он теряет контакт, затем onContactBegin запускается снова. Теперь первый
if ((contact.getShapeA () -> getCategoryBitmask () &
внутри onContactBegin всегда терпит неудачу ... так почему бы не выполнить условие условия ... что что-то не так с моим кодом?
Вот код:
#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 Код:
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;
}
Почему бы элементу управления не прийти к месту обнаружения шаров и шагов?