尝试在 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
无论我尝试什么,行星总是相互吸引(除非我将 fieldBitMask 设置为 0,但它们当然也不再被 Star 吸引)!我期望这两行代码只有恒星重力场才会对行星产生影响......
来自文档:
“字段位掩码: 定义哪些类别的物理场可以对该物理体施加力的掩码。 当物理体位于 SKFieldNode 对象的区域内时,该场节点的 categoryBitMask 属性通过执行逻辑 AND 运算与该物理体的 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
(不确定那是否是有效的 swift 代码,但你明白了)。您可以通过始终向左移动一位来扩展掩码。如果被 AND
编辑,这些掩码将始终产生零值。
关于ios - 相同类别的 SpriteKit/SKPhysics radialGravityField 总是相互吸引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32740601/