新手求助:碰撞事件进行了碰撞但是回调函数没响应

Sprite * sprite8 = Sprite::create(“supermario0.png”);
sprite8->setPosition(160,180);
sprite8->setScale(0.07f,0.07f);
auto body = PhysicsBody::createBox(Size(104,121));
body->setMass(1.0f);
body->setContactTestBitmask(0xFFFFFFFF);
body->setCategoryBitmask(0xFFFFFFFF);
body->setCollisionBitmask(0xFFFFFFFF);

body->setDynamic(true);
body->setLinearDamping(0.0f);
body->setGravityEnable(false);
Vect force = Vect(200.0f,0);
body->applyImpulse(force);
sprite8->setPhysicsBody(body);
this->addChild(sprite8);

Sprite * sprite9 = Sprite::create("brick1.png");
sprite9->setPosition(1100,155);
sprite9->setScale(1.5f,1.5f);
auto body1 = PhysicsBody::createBox(Size(66,56));
body->setMass(1.0f);
body->setContactTestBitmask(0xFFFFFFFF);
body->setCategoryBitmask(0xFFFFFFFF);
body->setCollisionBitmask(0xFFFFFFFF);
body1->setDynamic(true);
body1->setLinearDamping(0.0f);
body1->setGravityEnable(false);
sprite9->setPhysicsBody(body1);
this->addChild(sprite9);

auto contactListener = EventListenerPhysicsContact::create();
contactListener->onContactBegin = CC_CALLBACK_1(gamescene::onContactBegin,this);
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(contactListener, this);

bool gamescene::onContactBegin(const PhysicsContact & contact)
{
CCLOG(“OK”);
return true;
}

模拟器上显示了碰撞过程,但是控制台没有返回OK
新手跪求大家帮忙啊。。。谢谢大家

两个刚体的setContactTestBitmask 要进行"异或"运算才可以进去。

接触掩码 及 碰撞掩码 是两回事。你可以学习chipmunk的碰撞掩码相关知识。百度下就有啦。

额。。还是不太明白。。因为刚接触这个平台 能说的再稍微详细些吗~谢谢~

因为我也是在网上找这些的介绍然后按照人家的依葫芦画瓢自己写的
然后看见网上一个demo程序里的用法是
PhysicsBody *ball1_body = ball1->getPhysicsBody();
ball1_body->setCategoryBitmask(0x01);
ball1_body->setContactTestBitmask(0x01);
ball1_body->setCollisionBitmask(0x01);
auto contactListener = EventListenerPhysicsContactWithBodies::create(ball1_body);
contactListener->onContactBegin = CC_CALLBACK_1(ContactFilterScene::onContactBegin, this); _eventDispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);
bool ContactFilterScene::onContactBegin(PhysicsContact& contact)
{
CCLOG(“ball1_body contact begin”);
return true;
}

那个异或应该加在哪里呢?还是只是让它们异或的值为1就可以?
谢谢啦~~~

:14: :14: 关于碰撞,下边的帖子讲的很清楚。我就不复制啦。给你传送门。
http://www.tuicool.com/articles/nAZbuy

好的 多谢了!!!