欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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); // 持续触发