SKPhysicsBody(тел: столкновение BitMask не работает
У меня есть ситуация, когда мне нужно создать два SKPhysicsBody для одной текстуры, потому что реакция на столкновение должна отличаться
let leftBigBox = SKPhysicsBody(rectangleOf :CGSize(width: 490, height: 90) , center:bCenterPoint )
leftBigBox.contactTestBitMask = category_kitty
leftBigBox.categoryBitMask = category_train
leftBigBox.collisionBitMask = category_kitty | category_track
let rightSmallBox = SKPhysicsBody(rectangleOf :CGSize(width: 100, height: 45) , center:sCenterPoint )
rightSmallBox.categoryBitMask = category_wagon
rightSmallBox.collisionBitMask = category_kitty | category_track
rightSmallBox.contactTestBitMask = category_kitty
physicsBody=SKPhysicsBody(bodies: [leftBigBox,rightSmallBox])
но didBegin(_ contact: SKPhysicsContact)
не определяет, когда мой котенок попадает в дочерний узел. Я могу видеть режим отладки, это происходит, но делегат не будет печатать, если я укажу collisionBitMask
, contactTestBitMask
для родительской физики это работает, но моя цель состоит в том, чтобы разделить их на две * Я пытался использовать соединения и две разные текстуры, производительность настолько плохая
Это значения для котенка
physicsBody!.categoryBitMask = category_kitty
physicsBody!.contactTestBitMask = category_wagon | category_border | category_train
physicsBody!.collisionBitMask = category_border | category_wagon | category_train
1 ответ
По словам Apple: https://developer.apple.com/documentation/spritekit/skphysicsbody/1519736-init
"Свойства детей, такие как масса или трение, игнорируются. Используются только формы дочерних тел".
Это означает, что битовые маски, которые вы установили на двух отдельных физических телах, не сохраняются при создании новой физики через:
physicsBody=SKPhysicsBody(bodies: [leftBigBox,rightSmallBox])
(Как говорит KnightOfdragon, он использует только форму физических тел в массиве для создания формы нового физического тела. Затем вам нужно установить все свойства нового физического тела - ни одно из свойств соединяемых тел не используется.).
Так что, возможно, вам лучше присоединиться к двум физическим телам с помощью какого-либо соединения (если вы не знаете, как это сделать, задайте новый вопрос), или использовать какой-либо другой метод, чтобы определить, какая часть вашего объекта была немного поражена Китти.