Если я принудительно сбрасываю CategoryBitmask и CollisionBitmask в коде, тогда контактный слушатель срабатывает. Почему бы не работать с редактором физики ... в чем моя ошибка с настройкой редактора физики?
Герой, Монеты, Бомба - 3 объекта. здесь Герой должен столкнуться с Монетами и Бомбой.
Вот код для набора:
PhysicsShapeCache *shapeCache = PhysicsShapeCache::getInstance(); ;
shapeCache->setBodyOnSprite("HeroPhysicsShape", hero);
hero->getPhysicsBody()->setTag(HERO_BODYS_TAG);
//Force Reset
hero->getPhysicsBody()->setCategoryBitmask(0x01);
hero->getPhysicsBody()->setCollisionBitmask(0x05);
hero->getPhysicsBody()->setContactTestBitmask(0xFFFFFFFF);
Код Монеты:
PhysicsShapeCache *shapeCache = PhysicsShapeCache::getInstance();
shapeCache->setBodyOnSprite("CoinShape", coin);
coin->getPhysicsBody()->setGravityEnable(false);
coin->getPhysicsBody()->setTag(COIN_BODYS_TAG);
coin->getPhysicsBody()->setCategoryBitmask(0x02);
coin->getPhysicsBody()->setCollisionBitmask(0x01);
coin->getPhysicsBody()->setContactTestBitmask(0x01);
coin->getPhysicsBody()->setDynamic(false);
Контактный лист
auto contactListener = EventListenerPhysicsContact::create();
contactListener->onContactBegin = CC_CALLBACK_1(MGGameScene::onContactBegin, this);
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(contactListener,this);
bool MGGameScene::onContactBegin(cocos2d::PhysicsContact& contact)
{
// comes here if I force set Bitmask in code.
}
Вот скриншот редактора физики. Почему коллизия в редакторе физики не работает .. что не так?