gpt4 book ai didi

swift - 类别位掩码在 SpriteKit 中如何工作?(0xFFFFFFFF)

转载 作者:行者123 更新时间:2023-11-28 06:03:17 25 4
gpt4 key购买 nike

我无法理解这个位掩码的工作原理。我知道这默认设置为 0xFFFFFFFF,如果您希望两个主体联系,您可以设置两个不同的位掩码。

我的问题是如何设置 2(或更多)不同的位掩码,如何更改默认值以获得不同的值?我知道有 32 个不同的类别。你能给我一些吗?

最佳答案

类别

您可以有 32 个不同的类别。类别可以是容器、子弹、墙壁、敌人等)。如果您对碰撞和接触感兴趣,那么您首先需要为给定的对象设置一个类别。例如,容器类别 0,子弹类别 1,墙类别 2,敌人类别 3。由于它们是位掩码,因此您(分别)有 1、2、4、8。现在类别更多的是行为问题而不是身份问题。有些对象可能表现得像两个不同的类别:岩石(本身没有类别)表现得像墙(你在上面弹跳)和敌人(你可以向它们 throw 子弹)。那么岩石的类别将是 2 和 3,因为位掩码给出了 12。很难想象一个对象属于不同的类别,但是如果你考虑行为集而不是身份集,那么就很容易想到它.

掩码的默认值为 0xFFFFFFFF,这意味着每个对象都在每个可能的类别中,并且每个对象都相互碰撞。微调这些值可以显着改善物理引擎。

碰撞

碰撞用于定义物理世界中哪些对象发生碰撞。一些物体可能会相互交叉,而其他物体会弹跳。示例:魔法子弹可能会穿过墙壁,而普通子弹会停在墙壁上。

magicBullet.physicsBody.categoryBitMask = 1
ordinaryBullet.physicsBody.categoryBitMask = 1 // both bullets behave as bullets
wall.physicsBody.categoryBitMask = 2

ordinaryBullet.physicsBody.collisionBitMask = 2 // hits walls
magicBullet.physicsBody.collisionBitMask = 0 // do not physically see walls

碰撞被声明为位掩码,因为您必须声明给定对象能够与哪些其他类别进行物理交互。

联系人

接触与碰撞完全相同,只是要在您的代码中捕获两个对象接触的事实。因此,如果您对普通子弹撞墙感兴趣(对于魔法来说不一定有趣):

ordinaryBullet.physicsBody.contactTestBitMask = 2 // want to catch wall hit
magicBullet.physicsBody.contactTestBitMask = 0 // don't bother

一个稍微复杂一点的例子

现在,如果您添加另一种对象,比如硬墙,则可以:

magicBullet.physicsBody.categoryBitMask = 1
ordinaryBullet.physicsBody.categoryBitMask = 1 // both bullets behave as bullets
wall.physicsBody.categoryBitMask = 2 // some bullets may travel through
hardWall.physicsBody.categoryBitMask = 4 // nothing can travel through thses

ordinaryBullet.physicsBody.collisionBitMask = 6 // hits walls and hard walls
magicBullet.physicsBody.collisionBitMask = 4 // do not physically see walls but only hard walls

ordinaryBullet.physicsBody.contactTestBitMask = 6 // want to catch all wall hit
magicBullet.physicsBody.contactTestBitMask = 4 // just want to catch hard wall hitting

关于swift - 类别位掩码在 SpriteKit 中如何工作?(0xFFFFFFFF),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48944277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com