使用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);
答案 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);
甚至更好:在你绝对需要之前不要修改默认的位掩码。