Cocos2d-x中Physics物理引擎碰撞检测,setCategoryBitmask,setContactTestBitmask,setCollisionBitmask

Cocos2d-x中Physics物理引擎碰撞检测,setCategoryBitmask,setContactTestBitmask,setCollisionBitmask,第1张

概述看了一篇文章,然后自己测试了一下,应用起来应该是对的。之前阅读过的详细讲解 物理世界的创建 Scene* TestPhysics::createScene(){ auto scene=Scene::createWithPhysics();//需要创建为物理场景 scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld:

看了一篇文章,然后自己测试了一下,应用起来应该是对的。之前阅读过的详细讲解

物理世界的创建

Scene* TestPhysics::createScene(){        auto scene=Scene::createWithPhysics();//需要创建为物理场景    scene->getPhysicsWorld()->setDeBUGDrawMask(PhysicsWorld::DEBUGDRAW_ALL);//显示所有参数    scene->getPhysicsWorld()->setGravity(Vec2(0,-800));//设置重力参数    auto layer=TestPhysics::create();    scene->addChild(layer);    return scene;    }

创建物理边界,首先Scene应该是包含物理效果的,如上方式创建的
    auto size=Director::getInstance()->getVisibleSize();//获取窗口大小    auto body=PhysicsBody::createEdgeBox(size,PHYSICSBODY_MATERIAL_DEFAulT,3);//创建物理边界,宏表示边框的默认材质,3表示线的粗细    auto node=Node::create();//创建一个节点,用于绑定这个物理边界,东西都创建在边界里,不然会飞到无限远吧???我的猜想    node->setPhysicsBody(body);//添加物理边界到节点    node->setposition(Vec2(480,320));    this->addChild(node);//节点添加到层

创建物理碰撞体

    auto Box=Sprite::create();    Box->setTextureRect(Rect(0,50,50));//可以直接创建一个图片精灵    Box->setPhysicsBody(PhysicsBody::createBox(Box->getContentSize()));//设置碰撞体的形状和大小,这里是矩形盒子    Box->setposition(position);    Box->setcolor(color3B(255,0));    this->addChild(Box);

这样精灵就能受物理世界影响了。

下面再说碰撞

首先是碰撞事件监听

    //添加一个碰撞监听器    auto contactListener=EventListenerPhysicsContact::create();//创建监听器
    //<strong><span >检测到</span></strong>碰撞发生时的事件,还有可能是检测不到的    contactListener->onContactBegin=[](PhysicsContact &contact){        log("pengzhuang!");        return true;    };    Director::getInstance()->getEventdispatcher()->addEventListenerWithSceneGraPHPriority(contactListener,this); //添加监听器


关于碰撞的三个参数的设置

参数为4字节掩码 通常写成 0x00000000 0xFFFFFFFF等,掩码用来执行 “逻辑与” 即 “按位与” 运算。

还可以写成其他格式,如下:

#define RED_BIT_MASK    0b0100#define GREEN_BIT_MASK  0b0010#define BLUE_BIT_MASK   0b0001

下面来说作用和区别

    Box->getPhysicsBody()->setContactTestBitmask(int bitmask);//设置是否触发碰撞事件,默认掩码0x00000000
如果两个碰撞的物体,掩码逻辑与运算值为0,则不触发碰撞事件,不会执行碰撞回调函数。结果不为0则会触发
</pre><pre name="code" >    Box->getPhysicsBody()->setCollisionBitmask(int bitmask);//设置碰撞对象的掩码,如果对象类型掩码与此处设置相同则可以碰撞,默认与所有都能碰撞
</pre><pre name="code" >    Box->getPhysicsBody()->setcategoryBitmask(int bitmask);//设置物体本身的类型,默认不为0,设置为0时物体不能碰撞,也不能与墙壁碰撞


实例分析:

算了,实例有点复杂,自己一个一个去试就好了

总结

以上是内存溢出为你收集整理的Cocos2d-x中Physics物理引擎碰撞检测,setCategoryBitmask,setContactTestBitmask,setCollisionBitmask全部内容,希望文章能够帮你解决Cocos2d-x中Physics物理引擎碰撞检测,setCategoryBitmask,setContactTestBitmask,setCollisionBitmask所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1063908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存