physicsBody
,因为:1)如果蓝色节点存在,它应该移动; 2)它应该与世界其他地方发生碰撞,但与蓝色形状碰撞 节点和关节的设置都很好(见左),但是physicsBody
确实可以互相影响(右):
请注意:为了获得正确的关节,我必须在红色形状(玩家手臂)上添加一个子节点(圆圈)。因此,我们在这里谈论总共三个节点。
尝试了一堆东西。在Apples’ documentation和this thread之后,我了解到可以使用categoryBitMask
和collisionBitMask
的正确组合来解决。
BitMask:
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
...但是这并不能解决问题。
现在连续三天挣扎。我知道这种问题已经被问过无数次了,但是没有一个引导着我走向正确的方向。非常感谢任何建议!
答案 0 :(得分:0)
这是来自Apple文档:冲突BitMask(但对于Scenekit,可能在Spritekit中是相同的)
此键的值是一个包含NSUInteger的NSNumber对象 值。 SceneKit仅测试与物理物体之间的接触 categoryBitMask属性与此位掩码重叠。默认值 值是全部,指定搜索应测试所有物理体 不论其类别。
因此您不应该使用Category.all
答案 1 :(得分:0)
结果是我为红色形状解开了错误的physicsBody
,因此代码更改影响了错误的节点?
现在基本上可以按照我在原始问题中描述的方式进行操作了。
但是-如果您是像我这样的新手,我可以找到的最好的解释是this one(尤其是“问问自己”部分)。祝大家编码愉快!