physicsBody
,因为:1)如果蓝色节点确实会移动它,并且2)它应该与世界其他地方发生碰撞但没有]蓝色的形状节点和关节设置良好(请参见左图,但physicsBody
确实可以相互交互(右):
[请注意:为了获得正确的关节,我必须在红色形状(玩家手臂)上添加一个子节点(圆圈)。因此,我们在这里讨论的总共是三个节点。
[尝试了一堆东西。在Apples’ documentation和this thread之后,我了解到可以通过正确组合categoryBitMask
和collisionBitMask
来解决。
BitMasks:
struct Category { static let none: UInt32 = 0 static let all: UInt32 = UInt32.max static let playerBody: UInt32 = 0b1 // 1 static let playerArm: UInt32 = 0b10 // 2 static let regularObject: UInt32 = 0b100 // 4 }
🔵蓝色形状:
body.categoryBitMask = Category.playerBody body.collisionBitMask = Category.all
🔴红色形状(及其关节的子节点):
body.categoryBitMask = Category.playerArm body.collisionBitMask = Category.none
...但这不能解决问题。
现在已经连续三天挣扎了。我知道这种问题已经被问过无数次了,但是没有一个引导着我走向正确的方向。非常感谢任何建议!
期望的行为红色节点(玩家手臂)通过固定接头连接到蓝色节点。红色节点具有PhysicalBody,因为:1)如果蓝色节点存在,它应该移动; 2)它应该碰撞...
这是来自Apple文档:collisionBitMask(但对于Scenekit,也许在Spritekit中是相同的)
结果是我为红色形状解开了错误的physicsBody
,因此代码更改影响了错误的节点🤦