Я делаю игру с множеством тел разных категорий. Когда пользователь перемещает одно тело и сталкивается с другим телом той же категории, они приклеиваются друг к другу. Когда всего склеиваются три тела, они исчезают.
У тел есть битовая маска для конкретной категории и CNPhysicsCategoryGenBody, идентифицирующий тело в целом. Это требование игры, потому что в столкновении участвуют другие тела, которые не контролируются пользователем и не приклеиваются друг к другу.
Код didBeginContact, задействованный в склейке тел:
// Here I clean the mask removing the CNPhysicsCategoryGenBody and leaving the object particular
// category only.
uint32_t cleanMaskA = contact.bodyA.categoryBitMask ^ CNPhysicsCategoryGenBody;
uint32_t cleanMaskB = contact.bodyB.categoryBitMask ^ CNPhysicsCategoryGenBody;
// If the objects are of the same category create a joint
if (cleanMaskA == cleanMaskB) {
SKPhysicsJointFixed *newJoint = [SKPhysicsJointFixed jointWithBodyA:contact.bodyA bodyB:contact.bodyB anchor:contact.contactPoint];
[self.physicsWorld addJoint:newJoint];
}
Все идет нормально. Проблема возникает, когда я хочу перечислить тела, которые прикреплены к другому. Метод SKPhysicsBody -allContactedBodies не возвращает тела в соединении. Я думаю, это, вероятно, потому, что тело прикреплено к суставу, а не к другому телу.
В SKPhysicsWorld есть методы для добавления или удаления соединений, но я не могу найти способ перечислить тела, которые участвуют в соединении. Мне нужно перечислить эти тела, чтобы проверить, какие тела склеены, посмотреть, не больше ли они определенного числа, и удалить их.