cocos2dx 3.x 物理引擎接触检测掩码、碰撞掩码和类别掩码问题解析

cocos2dx 3.x 物理引擎接触检测掩码、碰撞掩码和类别掩码问题解析,第1张

概述言简意赅,物体的类别掩码CategoryBitMask和物体的接触测试掩码ContactTestBitmask逻辑“与”运算结果非零,则触发EventListenerPhysicsContact事件监听器,物体的类别掩码CategoryBitMask和物体的 碰撞掩码CollisionBitmask逻辑“与”运算结果非零,则触发物体碰撞效果。 //类别掩码,默认值0xFFFFFFFFbody->

言简意赅,物体的类别掩码categoryBitMask和物体的接触测试掩码ContactTestBitmask逻辑“与”运算结果非零,则触发EventListenerPhysicsContact事件监听器,物体的类别掩码categoryBitMask和物体的 碰撞掩码CollisionBitmask逻辑“与”运算结果非零,则触发物体碰撞效果。

//类别掩码,默认值0xFFFFFFFFbody->setcategoryBitMask(int bitmask);//接触检测掩码,默认值0x00000000body->setContactTestBitmask(int bitmask);//碰撞掩码,默认值0xFFFFFFFFbody->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 物理引擎接触检测掩码、碰撞掩码和类别掩码问题解析所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1063885.html

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

发表评论

登录后才能评论

评论列表(0条)

保存