Ios cocos2dx-旁通阀体触点

Ios cocos2dx-旁通阀体触点,ios,cocos2d-x,game-physics,cocos2d-x-3.0,chipmunk,Ios,Cocos2d X,Game Physics,Cocos2d X 3.0,Chipmunk,我正在使用cocos2dx设置两个具有相同物理实体定义的精灵,请参见下文 PhysicsBody *physicsBody=PhysicsBody::createBox(size,PhysicsMaterial(1.0f,0.0,0.5f),Vec2(0, size.height*0.5)); physicsBody->setGravityEnable(true); physicsBody->setCategoryBitmask(1); physicsBody->setColl

我正在使用cocos2dx设置两个具有相同物理实体定义的精灵,请参见下文

PhysicsBody *physicsBody=PhysicsBody::createBox(size,PhysicsMaterial(1.0f,0.0,0.5f),Vec2(0, size.height*0.5));
physicsBody->setGravityEnable(true);
physicsBody->setCategoryBitmask(1);
physicsBody->setCollisionBitmask(1);
physicsBody->setContactTestBitmask(true);
physicsBody->setDynamic(true);
physicsBody->setContactTestBitmask(0xFFFFFFFF);
physicsBody->setMass(5.0f);
node->setPhysicsBody(physicsBody);
我正在定义两个物理体之间的碰撞检测

auto contactListener=EventListenerPhysicsContactWithBodies::create(player1->getPhysicsBody(), player2->getPhysicsBody());

contactListener->onContactBegin = CC_CALLBACK_1(Game::onPlayerContact, this);

_eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);
我不希望这两个物体相互碰撞,或者,如果它们碰撞,会产生任何物理效应。我正在这样做

bool Game::onPlayerContact(cocos2d::PhysicsContact &contact){
    auto nodeA = contact.getShapeA()->getBody()->getNode();
    auto nodeB = contact.getShapeB()->getBody()->getNode();

    if(nodeA != NULL && nodeB != NULL){

        printf("\nPlayers collided");

    }

    return false;
}
我无法绕过两个物体之间的接触,还应该做些什么来避免碰撞?

请帮忙


谢谢。

碰撞过滤允许您防止形状之间的碰撞。Cocos2d-x支持使用类别和组位掩码进行冲突过滤

Cocos2d-x支持32种冲突类别。对于每个形状,可以指定它所属的类别。还可以指定此形状可以与哪些其他类别碰撞。这是通过掩蔽位完成的。例如:

auto sprite1 = addSpriteAtPosition(Vec2(s_centre.x - 150,s_centre.y));
sprite1->getPhysicsBody()->setCategoryBitmask(0x02);    // 0010
sprite1->getPhysicsBody()->setCollisionBitmask(0x01);   // 0001

auto sprite3 = addSpriteAtPosition(Vec2(s_centre.x + 150,s_centre.y + 100),2);
sprite3->getPhysicsBody()->setCategoryBitmask(0x03);    // 0011
sprite3->getPhysicsBody()->setCollisionBitmask(0x03);   // 0011
然后在碰撞回调中。这样做

if ((shapeA->getCategoryBitmask() & shapeB->getCollisionBitmask()) == 0
   || (shapeB->getCategoryBitmask() & shapeA->getCollisionBitmask()) == 0)
{
   // shapes can't collide
   ret = false;
}

来源:

您可能需要检查“物理”下的查询 也许是问题的关键

基本上,Box2d具有用于检测接触而非任何碰撞的传感器。。。
我建议使用Box2d而不是Cocos2d物理…它要好得多。

我不认为最后一段代码是正确的;在Cocos2d-xwiki中,这只是一个检查两个物体是否可能碰撞的示例。通过按您的方式设置遮罩,您将不会在碰撞回调中看到那两个物体碰撞,这就是您提出的全部观点,不是吗?@sanchitgulati我的代码与您的代码有多大不同,我也在告诉联系人代理绕过并返回false冲突和类别位掩码有什么作用吗?此链接适用于box2d,但遵循相同的概念