Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cocos2dx 3.x 物理引擎接触检测掩码、碰撞掩码和类别掩码问题解析大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
//类别掩码,默认值0xFFFFFFFF
body->setCategoryBitMask(int bitmask);

//接触检测掩码,默认值0x00000000
body->setContactTESTBitmask(int bitmask);

//碰撞掩码,默认值0xFFFFFFFF
body->setCollisionBitmask(int bitmask);
  • 例,笑脸和白云一接触并发生碰撞(注意,接触和碰撞时有区别的,下例说明),笑脸颜色变绿,白云颜色也变绿。如下图:

    在这个例子中要触发物理接触时间EventListenerPhysicsContact,如果用默认值,则笑脸的类别掩码是0xFFFFFFFF,白云的接触检测掩码是0x00000000,“与”运算后是0,同样,白云的类别掩码是0xFFFFFFFF,笑脸的接触检测掩码是0x00000000,“与”运算后也是0,不会触发事件监听器,所以要重新设置其中两方的接触测试掩码,只设置一方也不会触发事件监听器。设置如下:
bodySmile->setContactTESTBitmask(0x00000001);
bodyCloud->setContactTESTBitmask(0x00000001);

两者的类别掩码和碰撞掩码默认值都是0xFFFFFFFF,“与”运算后非零,所以触发了碰撞,直白地说就是笑脸没有穿过白云。

  • 例,笑脸和白云一接触但不发生碰撞,笑脸颜色变绿,白云颜色也变绿。如下图:

    笑脸和白云的接触检测掩码同上,我们要修改的是碰撞掩码和类别掩码。
//这样改的话,物体body不会跟任何其他物体发生碰撞(但是有接触),
//包括我们给窗口设置的边界框,效果就是落出屏幕外
body->setCollisionBitmask(0x00000000);

我的做法如下:

//笑脸类别掩码
    bodySmile->setCategoryBitmask(0x02);//0010,只写后4位

    //白云碰撞掩码
    bodyCloud->setCollisionBitmask(0x01);//0001

这样“与”运算为了,两者不会发生碰撞。

-最后要注意的是,碰撞时只要有一方的类别掩码和碰撞掩码与运算为零双方不会碰撞,但是要是触发接触时间需要双方彼此的类别掩码和接触测试掩码与运算非零才可以。

大佬总结

以上是大佬教程为你收集整理的cocos2dx 3.x 物理引擎接触检测掩码、碰撞掩码和类别掩码问题解析全部内容,希望文章能够帮你解决cocos2dx 3.x 物理引擎接触检测掩码、碰撞掩码和类别掩码问题解析所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。