两个动态物体在cocos2d-x v3.2中交叉和重叠

时间:2014-11-06 10:12:28

标签: c++ ios cocos2d-x

使用cocos2d-x v3.2,我有两个动态体bodyA和bodyB。并且bodyB禁用了重力并且在x轴上具有线性速度。 bodyA在y轴上有一个冲动。问题是bodyA正在通过bodyB。预期的结果是bodyA与bodyB碰撞,bodyA反弹而bodyB不受碰撞影响。以下是bodyA通过bodyB的示例代码。

PhysicsBody *bodyA = PhysicsBody::createCircle(spriteA->getContentSize().width/2);
bodyA->setDynamic(true);
bodyA->setMass(0.5f);
bodyA->setCategoryBitmask(1);
bodyA->setContactTestBitmask(true);

PhysicsBody *bodyB = PhysicsBody::createCircle(spriteB->getContentSize().width/2);
bodyB->setDynamic(true);
bodyB->setGravityEnable(false);
bodyB->setVelocity(Vect(100,0));
bodyB->setCollisionBitmask(2);
bodyB->setContactTestBitmask(true);
bodyB->setMass(5.0f);

1 个答案:

答案 0 :(得分:0)

setContactTestBitmask不接受bool,它应该采用一个int掩码,它应该包含正文应该与之碰撞的所有类别位。

现在你的两个身体已经设置了0001和0010位。但是,您的接触位掩码为两个主体设置了位0001。您还可以在bodyA中使用类别位掩码,在bodyB中使用碰撞位掩码。

这种方式应该有效:

PhysicsBody *bodyA = PhysicsBody::createCircle(spriteA->getContentSize().width/2);
bodyA->setCategoryBitmask(1);
bodyA->setContactTestBitmask(2);

PhysicsBody *bodyB = PhysicsBody::createCircle(spriteB->getContentSize().width/2);
bodyB->setCategoryBitmask(2);
bodyB->setContactTestBitmask(1);

甚至更好:在你绝对需要之前不要修改默认的位掩码。