SpriteKit 关于categoryBitMask collisionBitMask contactTestBitMask 遇到的一些问题
手写copy一下官方解释
首先是categoryBitMask
/** 定义了这个物理刚体是属于哪个类别的掩码 。在一个场景中的每个物理刚体可以分配给达到 32 不同的类别(参数 int bitmask是int类型4个字节32位),每个对应有32位中的1位掩码。您的游戏中您定义使用的掩码值。联同的 collisionBitMask 和 contactTestBitMask 的属性,定义哪些物理刚体彼此之间进交互和何时你接收到这些交互作用的通知。默认值为的 0xFFFFFFFF (所有的位都被设置).
*/
个人理解:你所创建的sprite是个啥(比如游戏里中的一个人物,命名person),用一位掩码来表示。如可以用掩码 0x01来表示(0001) categoryBitMask = 0x01 ;
collisionBitMask
/**
一个掩码,
它定义了哪些类别的物理刚体可以与这物理刚体发生碰撞。当两个物理刚体互相接触时,可能会发生冲突。这个刚体的碰撞掩码被相比其他刚体的类别掩码通过执行按位逻辑与运算。如果结果是一个非零值,则这一刚体被受碰撞。每个刚体独立地选择是否愿意受其他刚体的影响。例如,您可能会使用这来避免碰撞计算使对刚体的速度的变化可以忽略。默认值为的 0xFFFFFFFF (所有的位设置)。
*/
个人理解:哪些sprite可以与当前这个sprite(比如游戏里的一个怪物,命名zom)发生物理碰撞,用一位掩码来表示。如可以用掩码 0x02来表示(0010) collisionBitMask = 0x02;
按位逻辑与运算 ,拿上述俩个sprite举例。 0001 0010 运算结果为 0 ,说明zom不响应person的碰撞。 反之亦然。
不过这里有个问题,如何判断俩个物体谁碰撞的谁。
如设置 墙体的 collisionBitMask = 0x01; categoryBitMask = 0x01;
设置人物的 collisionBitMask = 0x03; categoryBitMask = 0x03;可以相互发生碰撞 0001 0011 --> 不为0
如设置人物 collisionBitMask = 0x02, categoryBitMask = 0x03; 人物移动,不与墙体发生碰撞。
如设置人物 collisionBitMask = 0x03, categoryBitMask = 0x02; 人物移动,与墙体发生碰撞。
以上俩中计算方法都是用人物的collisionBitMask与墙体的categoryBitMask进行计算,所以可以理解为是墙体碰撞的人物吗?
//////////////更新下理解
//body.categoryBitMask = 0; <类别掩码,为0时代表我谁也碰撞不了>
//body.contactTestBitMask = 0; <碰撞检测掩码,为0时代表不触发检测>
//body.collisionBitMask = 0; <允许碰撞掩码,为0时代表谁也碰撞不了我>
//想要发生碰撞,需要 categoryBitMask & collisionBitMask 运算,为非0,可以发生碰撞
假设俩个sprite A:B , A.categoryBitMask & B.collisionBitMask 为非0且 B.categoryBitMask & A.collisionBitMask也为非0,可以发生碰撞,相同加速度情况下,碰撞结果取决于物理体积
假设俩个sprite A:B , A.categoryBitMask & B.collisionBitMask 为0 但 A.collisionBitMask & B.categoryBitMask为非0,可以发生碰撞,但碰撞结果与上面不同,可以理解为,发生碰撞的时候,只考虑B的碰撞体积,把A的碰撞体积假设成0(虽然不是0),虽然发生碰撞,但是A碰撞B时候B是不会动的,B碰撞A的时候,只考虑B的碰撞体积,会把A碰撞开(这里A被碰撞开位移的大小与速度也与A的物理体积有关)。 反之亦然。
以上如有问题,希望大家帮忙指正。
SpriteKit 关于categoryBitMask collisionBitMask contactTestBitMask 遇到的一些问题的更多相关文章
- iFIERO - (一) 宇宙大战 SPACE BATTLE — 场景SCENE、SpriteKit精灵、PARTICLE粒子及背景音乐
开始游戏教程前,首先介绍一下SpriteKit是什么?SpriteKit提供了一个图形渲染和动画的基础结构,你可以使用它让任意类型的纹理图片或者精灵动起来.SpriteKit使用渲染循环,利用图形硬件 ...
- Cocos2d-x3.2 使用物理引擎进行碰撞检测[转]
通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵的条件是否满足判断条件就可以了.例如,在飞机大战中,判断我方子弹和敌机是否发生碰撞一般在定时器中通过敌机所在位置的矩 ...
- cocos2dx 3.2中的物理引擎初探(一)
cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk.我目前使用的是最新版的cocos2dx 3.2.引擎中默认使用的是chipmunk,如果想要改使用box2d的话,需 ...
- Cocos2d-x3.2总结---使用物理引擎进行碰撞检测
[转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...
- Cocos2d-x 使用物理引擎进行碰撞检测
[转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...
- cocos2d-x快乐的做让人快乐的游戏3:cocos-2d 3.x中的物理世界
Cocos2d-x 3.0+ 中全新的封装的物理引擎给了开发人员最大的便捷,你不用再繁琐与各种物理引擎的细节,全然的封装让开发人员能够更快更好的将物理引擎的机制加入�到自己的游戏中,简化的设计是从2. ...
- cocos2d-x 3.x 物理碰撞机制
近期又弄了物理引擎.写一下吧,以下有在其它博客学习到的知识.加上自己的理解,总结下. cocos2d-x 3.X 中全新的封装的物理引擎给了开发人员最大的便捷,你不用再繁琐与各种物理引擎的细节,全然的 ...
- Cocos2d-x 3.0中 物理碰撞检測中onContactBegin回调函数不响应问题
好吧,事实上这篇也是暂时冒出来的,近期朋友要做个物理游戏,曾经做物理还是用box2d,呃.确实要花些功夫才干搞懂当中的精髓,可是听讲这套引擎又一次封装了一次.要easy非常多,所以就简单尝试了一下,感 ...
- Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路
cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk.我眼下使用的是最新版的cocos2dx 3.1.1.引擎中默认使用的是chipmunk.假设想要改使用box2d的话 ...
随机推荐
- FTP服务-filezilla server 配置
一.下载Filezilla Server 官网网址:https://filezilla-project.org/download.php?type=server 二.安装Filezilla Ser ...
- MySQL数据库-pymysql模块操作数据库
pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connect() 参数: host=数据库ip port= ...
- 第五节《Git基本操作》
我们给原来的数据打一个tag(标签),专业术语叫做“里程碑”,我们先不介绍里程碑的奥秘,只要知道里程碑无非也是一个引用而已. [root@git demo]# pwd/git/my/workspace ...
- openstack--9--深入理解虚拟机
登录计算节点查看进程 [root@linux-node2 ~]# ps aux | grep kvm root 824 0.0 0.0 0 0 ? S< 10:19 0:00 [kvm-irqf ...
- openstry lua redis实现负载均衡
需求: 通过URI地址http://10.0.0.148/test2?uuid=123的uuid参数值的第一位,去实现redis的负载均衡 若uuid第一位为1,那么去10.0.0.148的redis ...
- MySQL通过分组计算百分比
公司在做柯米克的分析报告,需要我这边把汽车之家柯米克论坛的评论数据和评论用户所在地的数据获取,通过爬虫的方式很快的解决了数据的问题,但是需要我提取下各省评论人数的比例,所以在数据库里面直接计算了相关的 ...
- mongodb与mysql命令详细对比
传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由数据库(database).集合(collection).文档对象(docu ...
- 装完Centos7提示Initial setup of CentOS Linux 7 (core)
在用U盘装完CentOS后,重新开机启动后显示: Initial setup of CentOS Linux 7 (core) 1) [x] Creat user 2) [!] License inf ...
- 实验-12-JSP简单入门
参考资料 JSP实验参考文件 主要看实验任务书 实验1. 第一个HTML页面与Tomcat 实验内容:任务书中的JSP-实验1. 1.1 EclipseJEE的使用 新建Tomcat Server 新 ...
- WIN7X64SP1极限精简版by双心
WIN7X64SP1极限精简版by双心 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=405044&page=1&ext ...