coco2d-x碰撞检测事件
程序员文章站
2024-03-16 16:45:16
...
//body设置掩码
body->setCategoryBitmask(0x3);//自身类别掩码要与other碰撞掩码进行按位运算,包含就碰撞,不包含就穿透
body->setCollisionBitmask(0x3);
body->setContactTestBitmask(0x3);// Contact 连接测试掩码 控制碰撞事件 要与 Category进行运算
boxBodyCircle->setCategoryBitmask(0x1);
boxBodyCircle->setCollisionBitmask(0x1);
boxBodyCircle->setContactTestBitmask(0x3);
//添加碰撞事件
// 碰撞检测事件 整个物理世界碰撞事件都在这里
EventListenerPhysicsContact *physicsConstact = EventListenerPhysicsContact::create();
//碰撞进入
physicsConstact->onContactBegin=CC_CALLBACK_1(HelloWorld::onCollsionEnter,this);
//填两个参 EventListenerPhysicsContact的对象,以及碰撞检测的对象
getEventDispatcher()->addEventListenerWithSceneGraphPriority(physicsConstact,rootNode);
这是回调函数
bool HelloWorld::onCollsionEnter(PhysicsContact & contact)
{
log("bool HelloWorld::onCollsionEnter");
std::string bobyA = contact.getShapeA()->getBody()->getName();
std::string bobyB= contact.getShapeB()->getBody()->getName();
return true;// 返回false Trigger 模式 true 碰撞模式
}
physicsContact->onContactPostSolve = CC_CALLBACK_2(HelloWorld::onCollsionStay, this); //持续碰撞
physicsContact->onContactSeparate = CC_CALLBACK_1(HelloWorld::onCollistionExit, this); // 离开碰撞
physicsContact->onContactPreSolve = CC_CALLBACK_2(HelloWorld::onContactPreSolve, this); // 持续触发
上一篇: 1296: 近似计算