手写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. linux(ubuntu)共享文件夹

    Linux系统的文件或目录的共享功能是非常强大,而且是非常灵活的,其对权限的控制可以做到非常的细致,当然如果你是通过命令行方式进行设置的 话,那么对于刚接触linux系统的用户来说将是一件十分头痛的事 ...

  2. 用turtle画图

    turtle是python自带一个寓教于乐的小乌龟,可以控制乌龟移动(机器人),可以留下足迹. turtledemo里有许多官方例子.刚才随性而发做,看了介绍随手画了一个,有点像自动原包机,通过简单的 ...

  3. 好久没考虑过的 sql 注入

    很多年没考虑 sql 注入了,毕业以后 使用mybatis #{ 参数的 语法 },这个 语法已经 做了防止 sql 注入的处理 . 看到同事写的 ${ 参数 },突然 想到这个问题 . 下面聊聊 s ...

  4. 基于redis的 分布式锁 Java实现

    package com.hs.services.lock; import java.util.concurrent.TimeUnit; import javax.annotation.Resource ...

  5. django操作数据库 ORM

    一,数据库连接 创建类 a. 在models.py中先写类 from django.db import models # 表名是app01_userinfo class UserInfo(models ...

  6. uniDAC的安装和使用

    1.解压后把UniDAC文件夹 2.在UniDAC\Source\Delphi7文件夹中找到Make.bat文件,鼠标右键“编辑”确认DELPHI7的安装路径是否正确(建议:设置成绝对路径了,防止因为 ...

  7. 对poi-excel导出的浅层理解

    上一篇对excel导入做了浅层的解释,本文将对导出再做浅层解释. 仍然是相同的套路,只不过是反过来而已. 反过来方向理论上本来是这样的:cell-->row-->sheet-->wo ...

  8. VMware Workstation 11 搭建windows server 2012 之sql server 2012集群常见问题整理

    1.windows server 2012内置支持iSCSI发起程序无需额外安装,iSCSI Software Target 可作为“文件和存储服务”角色下的内置功能使用 2.拷贝虚拟机的文件加入域时 ...

  9. Java内存列表

    当jvm运行起来的时候,它会向系统申请一片内存区,并将这块内存分出一部分存储程序创建的对象,传递给方法的参数,返回值,局部变量等等,我们将这块内存称之为“运行时数据区”. 初学的时候把Java内存分为 ...

  10. Laravel线上布暑到linux的问题汇总

    1.直接报403错误 ,配置文件中增加: location / { try_files $uri $uri/ /index.php?$query_string; } 同时根目录不是指到项目名,而是指到 ...