Различать несколько физических тел на одном спрайте - PullRequest
0 голосов
/ 03 декабря 2018

Скажите, у меня есть три спрайта;игрок, треугольник и квадрат.

Каждому треугольнику и квадратным узлам назначается SKPhysicsBody, в то время как у узла игрока есть два - внутренний и внешний - разных размеров.

Внутреннее предназначено только для регистрации контакта с треугольником, а внешнее - для квадрата.

Я назначил каждое физическое тело для узла игрока:

playerNode.physicsBody = SKPhysicsBody(bodies: [inner, outer])

и дал каждому aname:

inner.node?.name = "inner"
outer.node?.name = "outer"

Однако при контакте для либо в didBegin при печати:

contact.bodyB.node?.physicsBody?.node?.name 

отображается ноль, либо имя узла игрока, если он есть.И это не то же самое, что печать:

contact.bodyB.node?.name

, которая предназначена для самого узла игрока.Если у физического тела есть собственное имя, почему я не могу его идентифицировать, чтобы отличить от другого физического тела?

1 Ответ

0 голосов
/ 03 декабря 2018

Это потому, что вы на самом деле не сделали то, что пытались сделать:

Каждому треугольнику и квадратным узлам присвоен SKPhysicsBody, в то время как у узла игрока есть два - внутренний и внешний,различных размеров.

при попытке назначить 2 физических тела узлу игрока с помощью этой строки:

playerNode.physicsBody = SKPhysicsBody(bodies: [inner, outer])

На самом деле вы создали новое физическое тело (которое представляло собой объединение физических тел inner и outer) и присвоили это новое физическое тело (у которого нет имени) и присвоили его своему игровому узлу.

https://developer.apple.com/documentation/spritekit/skphysicsbody/1519736-init

Создает физическое тело, выполняя объединение группы основанных на объеме физических тел.

Таким образом, игрок все еще имеет толькоодно физическое тело (которое не является ни внутренним, ни внешним), которое может иметь все узел.

Один из способов добиться этой работы - создать 2 новых узла - playerInner и playerOuter, возможно, каждый сих собственное физическое тело - и присоединиться к ним, чтобы создатьузел игрока.(playerInner может быть дочерним узлом playerOuter)

...