Желаемое поведение
- Красный узел (рука игрока) соединен с синим с помощью закрепленного соединения.
- Красный узел имеет
physicsBody
, потому что: 1) он должен двигаться, если синий узел делает, и 2) он должен сталкиваться с остальным миром , но не с синей формой - И наоборот: синий узел (тело игрока) должен сталкиваться с остальным миром - , но, очевидно, не с красным узлом.
Задача
Узлы и соединение настроены нормально (см. Слева), но physicsBody
взаимодействуют друг с другом (справа):
Обратите внимание : Чтобы получить правильное соединение, я должен был добавить дочерний узел (круг) к красной форме (рука игроков). Итак, мы здесь говорим о трех узлах.
Недавняя попытка
Пробовал кучу вещей. Следуя документации Apple и этой теме Я узнал, что это можно решить с помощью правильной комбинации 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
... но это не решать проблему.
Борется три дня подряд. Я знаю, что подобные вопросы уже задавались много раз, но ни один из них не привел меня в правильном направлении. Очень ценю любой совет!