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的话 ...
随机推荐
- 关于JVM的一些冷知识
(1) Java加载类的一般顺序: 1.静态属性,静态方法声明,静态块. 2.动态属性,普通方法声明,构造块. 3.构造方法. 当加载一个类时,JVM会根据属性的数据类型第一时间赋默认值(一举生成的) ...
- HTTP 各状态码大全
基本涵盖了所有问题 HTTP 400 – 请求无效 HTTP 401.1 – 未授权:登录失败 HTTP 401.2 – 未授权:服务器配置问题导致登录失败 HTTP 401.3 – ACL 禁止访问 ...
- nodeppt:网页版 PPT
资料 网址 github https://github.com/ksky521/nodeppt 网页版PPT(nodeppt 的介绍) http://deliazhi.com/2017/03/31/W ...
- 基于MATLAB System Generator 搭建Display Enhancement模型
基于MATLAB System Generator 搭建Display Enhancement模型
- sourcetree file status checkbox gone (文件状态下的勾选文件 list 消失)
原来是这样的(sourcetree 版本 2.7.1) 不知道触发了什么条件,sourcetree 变成了以下状态(官方解释是拖动面板小于 1 px 后会导致这个问题) 中间的那一列可勾选的已修改的文 ...
- linux 磁盘 扩展分区
- 【剑指offer】合并有序链表
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. *思路:假设两个链表的当前结点为n1(list1),n2(list2)比较链表结点值的大小,如果n1.va ...
- win10下btcd的安装和简单配置
btcd btcd github地址 1. 安装 1) 安装go的包管理工具glide glide github地址 $ go get -u github.com/Masterminds/glide ...
- Python【每日一问】06
问:简述Python文件打开模式 r. w. a. r+.w+.a+之间的区别 答: 1.只读模式 r 文件存在:只读打开,只能执行读操作 文件不存在:报错 # ######## 只读模式r #### ...
- SSH Secure Shell Client中文乱码的解决方法
http://www.cnblogs.com/52linux/archive/2012/03/24/2415082.html 方案一:修改linux服务器的环境变量 使用linux,在用户根目录下有一 ...