Cocos2d-x с редактором физики - EventListenerPhysicsContact не запущен - PullRequest
0 голосов
/ 09 марта 2020

Если я принудительно сбрасываю 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.
}

Вот скриншот редактора физики. Почему коллизия в редакторе физики не работает .. что не так? enter image description here enter image description here enter image description here

...