当前位置: 首页 > 面试题库 >

无法理解碰撞位掩码的工作原理

车靖琪
2023-03-14
问题内容

我正在尝试在Swift中使用碰撞位掩码和接触测试位掩码,我希望两个对象不会碰撞在一起,所以我正在做:

firstNode.physicsBody?.collisionBitMask = 0b01
secondNode?.collisionBitMask = 0b10

由于SpriteKit对这两个数字执行AND操作,因此结果不应该是00因为10 & 01 = 00

那么为什么仍然发生碰撞呢?

谢谢。


问题答案:

这不是冲突处理的工作原理。当两个物体相交时,物理引擎AND在当前物体collisionBitMask与他人的物体
之间执行逻辑运算符categoryBitMask

当两个物理物体相互接触时,可能会发生碰撞。通过执行逻辑“与”运算,将该人体的防撞蒙版与其他人体的类别蒙版进行比较。如果结果为非零值,则此主体受碰撞影响。每个机构独立选择是否要受到另一个机构的影响。例如,您可以使用它来避免碰撞计算,该碰撞计算对物体速度的变化可以忽略不计。

该源。

因此,结果取决于您categoryBitMask在这两个物体上的设置方式。的默认值categoryBitMask
0xFFFFFFFF,表示设置了所有位。因此,当您在0xFFFFFFFF0b10或之间执行&时0b01,结果将为非零值,即碰撞。

因此,例如,将您的身体设置如下:

spriteA.physicsBody?.categoryBitMask = 0b01
spriteA.physicsBody?.collisionBitMask = 0b01

spriteB.physicsBody?.categoryBitMask = 0b10
spriteB.physicsBody?.collisionBitMask = 0b10

会给您想要的结果。另外,这可能不是您需要的确切设置,这只是一个简单的示例,您将必须根据需要更改值。在这种情况下,spriteA仅会与categoryBitMask设置为的物体碰撞0b01。spriteB同样如此,它将与categoryBitMask设置为的物体碰撞0b10

另外,如果您不希望这些精灵与任何东西碰撞,只需将其collisionBitMask属性设置为0。



 类似资料:
  • 我正在用pygame和数学模块用python编写一个游戏。我写了这些代码来进行碰撞检测(我制造了5个障碍物,我想让我的玩家与之碰撞),但问题是在玩游戏的过程中,有时有效,有时无效。 这些是我定义的碰撞函数 在while循环中 请告诉我哪里做错了。

  • 问题内容: 我正在尝试了解其工作原理。 我在他们的文档中看到他们使用预先填充的用户列表。我想玩一个数据库存储的用户列表。 但是,我不了解本模块中的某些内容。 每次请求都会调用此代码吗?这是用来加载我的用户对象的所有详细信息吗? 现在,我有以下代码: 当我访问/ make-login时,我想登录。 我的用户类别: 另外,我写了另外两个用于身份验证/注册的功能 我不知道如何使它与MySQL一起使用。另

  • 我有4个物理体,它们都很好地检测到碰撞。然而,有两个物理体不会检测到它们何时相互碰撞。不过,它们会检测到它们何时与其他物理体碰撞。我有所有这些物理体的联系人测试位掩码,所以我不明白为什么会有问题。以下是一些代码:这是我设置物理体的地方: 以下是我用于设置玩家物理体(其中一个问题物理体)的代码: 以下是检测碰撞的函数: 下面是我用来设置蓝球的代码。这是另一个有问题的物理体: 这里的任何想法都会有所帮

  • 本节暂未进行完全的重写,错误可能会很多。如果可能的话,请对照原文进行阅读。如果有报告本节的错误,将会延迟至重写之后进行处理。 上个教程的最后,我们得到了一种有效的碰撞检测方案。但是球对检测到的碰撞不会有反作用;它仅仅是径直穿过所有的砖块。我们希望球会从撞击到的砖块反弹。此教程将讨论如何使用AABB-圆碰撞方案实现这项称为碰撞处理(Collision Resolution)的功能。 当碰撞发生时,我

  • 所以基本上在过去的一个半年龄里,我一直试图让这个盒子家伙(球员)当他与另一个盒子碰撞时,他停止向他与盒子碰撞的方向移动。它有点成功,但在看似随机的时刻,如果我向上移动并击中玩家左侧的盒子,它可能会溅入与之碰撞并飞下来的盒子。每个方向都是一样的。 checkCollision方法每秒调用60次。getBounds(l/r/u/d)函数只返回与字母对应的左、右、上(上)或下(下)侧的矩形。Id就是玩家

  • 本文向大家介绍JavaScript碰撞检测原理及其实现代码,包括了JavaScript碰撞检测原理及其实现代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了JavaScript实现碰撞检测原的具体代码,供大家参考,具体内容如下 1.模拟碰撞 简单模拟碰撞过程,用一个可以拖拽的div2去尝试碰撞一个固定的div1(均用绝对定位) 2.碰撞检测原理 如图所示: 使得div分别有4个距离