手写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 遇到的一些问题的更多相关文章

  1. iFIERO - (一) 宇宙大战 SPACE BATTLE — 场景SCENE、SpriteKit精灵、PARTICLE粒子及背景音乐

    开始游戏教程前,首先介绍一下SpriteKit是什么?SpriteKit提供了一个图形渲染和动画的基础结构,你可以使用它让任意类型的纹理图片或者精灵动起来.SpriteKit使用渲染循环,利用图形硬件 ...

  2. Cocos2d-x3.2 使用物理引擎进行碰撞检测[转]

    通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵的条件是否满足判断条件就可以了.例如,在飞机大战中,判断我方子弹和敌机是否发生碰撞一般在定时器中通过敌机所在位置的矩 ...

  3. cocos2dx 3.2中的物理引擎初探(一)

    cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk.我目前使用的是最新版的cocos2dx 3.2.引擎中默认使用的是chipmunk,如果想要改使用box2d的话,需 ...

  4. Cocos2d-x3.2总结---使用物理引擎进行碰撞检测

    [转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...

  5. Cocos2d-x 使用物理引擎进行碰撞检测

    [转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...

  6. cocos2d-x快乐的做让人快乐的游戏3:cocos-2d 3.x中的物理世界

    Cocos2d-x 3.0+ 中全新的封装的物理引擎给了开发人员最大的便捷,你不用再繁琐与各种物理引擎的细节,全然的封装让开发人员能够更快更好的将物理引擎的机制加入�到自己的游戏中,简化的设计是从2. ...

  7. cocos2d-x 3.x 物理碰撞机制

    近期又弄了物理引擎.写一下吧,以下有在其它博客学习到的知识.加上自己的理解,总结下. cocos2d-x 3.X 中全新的封装的物理引擎给了开发人员最大的便捷,你不用再繁琐与各种物理引擎的细节,全然的 ...

  8. Cocos2d-x 3.0中 物理碰撞检測中onContactBegin回调函数不响应问题

    好吧,事实上这篇也是暂时冒出来的,近期朋友要做个物理游戏,曾经做物理还是用box2d,呃.确实要花些功夫才干搞懂当中的精髓,可是听讲这套引擎又一次封装了一次.要easy非常多,所以就简单尝试了一下,感 ...

  9. Cocos2d-x 3.1.1 学习日志13--物理引擎登峰造极之路

    cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk.我眼下使用的是最新版的cocos2dx 3.1.1.引擎中默认使用的是chipmunk.假设想要改使用box2d的话 ...

随机推荐

  1. mysql连接拍错总结

    1. ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10060)   ? 关闭网络防火墙.

  2. robot framework中的timeout的关键词

    1.默认robotframework中的含有等待的关键词(如:Wait Until Element Is Enabled),未手动设置时默认该参数为5sec 2.关键词:sleep A)一般在调试的时 ...

  3. eclipse中mybatis自动生成插件使用

    对于使用Mybatis的开发者来说, 使用mybatis generator来生成mapper 以及配置文件, 可以大大简化工作, mybatis generator有多种工作方式, eclipse插 ...

  4. Linux内核原理第八次作业

    Linux内核如何装载和启动一个可执行程序 一.ELF可执行文件格式 ELF格式分类: 可重定位文件:用来和其他object文件一起创建可执行文件和共享文件 可执行文件:指出应该从哪里开始执行 共享文 ...

  5. InnoDB引擎体系架构

    InnoDB引擎架构介绍 innodb存储引擎的体系架构,可简单划分成三层: 数据文件 :磁盘上的数据文件 内存池:缓存磁盘上的数据,方便读取,同时在对磁盘文件数据修改之前在这里缓存,然后按一定规刷新 ...

  6. linux nodejs

    scp node-v8.15.0-linux-x64.tar.gz root@10.88.248.231:/lngoa tar -zxvf node-v8.15.0-linux-x64.tar.gz ...

  7. sqlserver存储过程sp_send_dbmail邮件(html)实际应用

    前段时间因工作需求,特地学习了下sp_send_dbmail的使用,发现网上的示例对我这样的菜鸟太不友好/(ㄒoㄒ)/~~,好不容易完工来和大家分享一下,不谈理论,只管实践! 如下是实际需求: -- ...

  8. 数据访问安全--数据库遮罩及断词 Data Masking & Tokenization

    现在大数据时代几乎无隐私,各政府部门各公司都要求实名制(动不动手机认证,身份证号码认证),但又无力确保数据安全,称为乱象. 其实在2011年,我们就接触过数据库遮罩断词产品,一个澳大利亚公司产品. 简 ...

  9. Java八大排序算法

    Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...

  10. React开发笔记

    项目环境搭建 使用create-react-app CSS使用styled-components yarn add styled-components 引入reset.css样式 import { c ...