cocos2dx 物理碰撞

移动开发 作者: 2024-08-25 12:25:01
https://www.cnblogs.com/JiaoQing/p/3906780.html 四个响应函数 1 EventListenerPhysicsContact* evContact = EventListenerPhysicsContact::create();//创建一个物理世界的碰撞事件 2 evContact->onContactBegin = [](PhysicsCo
 1 EventListenerPhysicsContact* evContact = EventListenerPhysicsContact::create();//创建一个物理世界的碰撞事件
 2     evContact->onContactBegin = [](PhysicsContact& contact)
 3     {
 4         CCLOG("Begin!\n");
 5         return true;
 6     };
 7     evContact->onContactPreSolve = [](PhysicsContact& contact,PhysicsContactPreSolve& solve)
 8     {
 9         CCLOG("PreSolve!\n");
10         return true;
11     };
12     evContact->onContactPostSolve = [](PhysicsContact& contact,const PhysicsContactPostSolve& solve)
13     {
14         CCLOG("PostSolve!\n");
15     };
16     evContact->onContactSeperate = [=](PhysicsContact& contact)//该函数在两个碰撞的刚体分离后调用
17     {
18         CCLOG("Seperate!\n");
19         auto bodyA = (Sprite*)(contact.getShapeA()->getBody()->getNode());//两个碰撞刚体相对应的节点之A
20         auto bodyB = (Sprite*)(contact.getShapeB()->getBody()->getNode());//两个相碰撞刚体对应节点之B
21         if(!bodyA||!bodyB)//按理说碰撞发生之后不会发生有一个刚体的节点不存在的情况,但是实际测试时发现bodyA或bodyB有为NULL的情况,因此我们在这里做一个判断排除节点为空的情况
22             return;
23         int tagA = bodyA->getTag();
24         int tagB = bodyB->getTag();
25         if(tagA == 3)
26         {
27             bodyA->removeFromParentAndCleanup(true);
28         }
29         if(tagB == 3)
30         {
31             bodyB->removeFromParentAndCleanup(true);
32         }
33     //    prop->setVisible(true);
34     };
35     _eventDispatcher->addEventListenerWithSceneGraphPriority(evContact,this);//注册碰撞事件
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_68391.html
cocos2dx cocos 2 dx 物理 碰撞