SpriteKit/SKPhysics radialGravityField of same category always attracting each others?
遇到一个问题,试图在SpriteKit中使用径向重力场
我不希望使用相同种类的对象(按categoryBitMask的定义相互吸引)
这是我的操作方式:
1 2 3 4 5 6 7 8 9 10 11 12 | 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吸引)!我希望这两行代码只能使恒星重力场对行星产生影响...
来自文档:
" fieldBitMask:
定义哪些物理场类别可以在此物理体上施加力的蒙版。
当物理主体在SKFieldNode对象的区域内时,通过执行逻辑与运算,将该字段节点的categoryBitMask属性与该物理主体的fieldBitMask属性进行比较。如果结果为非零值,则将场节点的效果应用于物理物体。"
我做错什么了吗?
您的口罩不合时宜。在二进制文件中,它们如下所示:
1 2 | 0000 0000 1011 0001 (stars) 0000 1011 0001 0000 (planets) |
这两个的逻辑
1 | 0000 0000 0001 0000 |
因此,如果
1 2 | static let Star : uint32_t = 0x1 << 0 static let Planet : uint32_t = 0x1 << 1 |
(不确定这是否是有效的快速代码,但是您知道了)。您可以通过始终向左移一点来扩展遮罩。如果