我是Cocos2d-x 3.2 Physic Engine的新手(正如Cocos2d-x所说,这个引擎基于Chipmuk)。 我制作了Popcap的“蛋射击”游戏样本。 当检测到2个鸡蛋的接触时,我遇到了一个问题,当接触事件被抛出时,动态的“蛋”似乎沉入静止的“蛋”。 我订了鸡蛋:
这是图片:
检测接触球事件
auto contactBallListener = EventListenerPhysicsContact::create();
contactBallListener->onContactBegin = CC_CALLBACK_1(IngameScene::onContactBallsBegin, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(contactBallListener, this);
.....
bool IngameScene::onContactBallsBegin(PhysicsContact& contact)
{
auto objA = contact.getShapeA()->getBody()->getNode();
auto objB = contact.getShapeB()->getBody()->getNode();
}
物理设置
if (group == BallGroupTarget) {
//Green ball
body->setCategoryBitmask(0xFFFFFFF0);
body->setContactTestBitmask(0x0000000F);
body->setCollisionBitmask(0xFFFFFFFF);
} else if (group == BallGroupShooting){
//Pink ball
body->setContactTestBitmask(0xFFFFFFFF);
body->setGravityEnable(false);
}
你能帮我解决这个问题吗?
非常感谢!
答案 0 :(得分:1)
当一个主体的CategoryBitmask与另一个主体的ContactTestBitmask结果不等于零时,将发送联系事件,否则将不会发送联系事件。
当一个体的CategoryBitmask与另一个体的CollisionBitmask结果不等于零时,它们将合并,而不是。
您应该注意到,默认情况下,CategoryBitmask值为0xFFFFFFFF,ContactTestBitmask值为0x00000000,CollisionBitmask值为0xFFFFFFFF,这意味着所有实体将相互冲突,但默认情况下不会发送联系事件。
观察上面的 SECOND 和第三点。在游戏中相应地设置位数。
制作静态物体
pinkBall-> setDynamic(假); //这里不需要设置重力假。现在粉红色的球变得静止,没有重力效应
答案 1 :(得分:0)
bool IngameScene::onContactBallsBegin(PhysicsContact& contact)
此方法应返回bool。你没有回报任何东西。很确定编译器会抱怨这一点。不确定C ++默认是什么,它甚至可能返回垃圾。
如果你想要身体碰撞,则返回true,如果它们应该相互穿过则返回false。