尝试在SpriteKit中使用径向重力场时遇到问题
我不希望使用相同种类的对象(按categoryBitMask的定义来吸引对方)
这是我的方法:
struct PhyscisCategory {
static let None : UInt32 = 0
static let All : UInt32 = UInt32.max
static let Star : UInt32 = 0b1
static let Planet : UInt32 = 0b10
}
<....>
Planet1.physicsBody!.categoryBitMask = PhyscisCategory.Planet
Planet1.physicsBody!.fieldBitMask = PhyscisCategory.Star
Planet2.physicsBody!.categoryBitMask = PhyscisCategory.Planet
Planet2.physicsBody!.fieldBitMask = PhyscisCategory.Star
无论我尝试了什么,Planets总是相互吸引的(除非我将fieldBitMask设置为0,但它们当然也不再被Star吸引)!我希望这两行代码只能使恒星重力场对行星产生影响...
从文档中:
“ fieldBitMask:
定义哪些物理场类别可以在此物理体上施加力的蒙版。
当物理主体在SKFieldNode对象的区域内时,通过执行逻辑与运算,将该字段节点的categoryBitMask属性与该物理主体的fieldBitMask属性进行比较。如果结果为非零值,则将场节点的效果应用于物理物体。”
我做错什么了吗?
最佳答案
你的口罩不合时宜。在二进制文件中,它们如下所示:
0000 0000 1011 0001 (stars)
0000 1011 0001 0000 (planets)
这两个的逻辑
AND
产生一个非零值:0000 0000 0001 0000
因此,如果
SpriteKit
用另一个星球的类别位掩码评估您的星球的场位掩码,它们将相互吸引。尝试使用这些面具:static let Star : uint32_t = 0x1 << 0
static let Planet : uint32_t = 0x1 << 1
(不知道这是否是有效的快速代码,但是您知道了)。您可以通过始终向左移一点来扩展遮罩。如果
AND
-ed,则这些掩码将始终产生零值。关于ios - 属于同一类别的SpriteKit/SKPhysicsradialGravityField总是相互吸引吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32740601/