Я начинаю изучать Swift2 для разработки на iOS с помощью SpriteKit, и я не могу обнаружить, что коснулся видимой части моего спрайта.Обнаружение касания в ограничительной рамке (альфа-маска) спрайта с помощью SpriteKit
я могу найти, какой узел был затронут так:
let touchedNode = self.nodeAtPoint(location)
Но это обнаружить прикосновение спрайта. Я хотел бы обнаружить прикосновение к «непрозрачной» части спрайта.
Я попытался создать PhysicsBody с ограничительной рамки альфа-маски и тестирования, если ограничивающий прямоугольник узла, который я выбрал содержит местоположение прикосновения, как это:
sprite.physicsBody = SKPhysicsBody.init(texture: sprite.texture!, size: sprite.size)
sprite.physicsBody?.affectedByGravity = false
if (touchedNode.containsPoint(location)){
Но это не помогло. Если я щелкнув прозрачную часть моего спрайта, событие все еще запускается.
Документация гласит: «Создан новый физический корпус, который включает в себя все тексели в текстуре, которые имеют ненулевое значение альфа». Так не должно ли это работать?
Спасибо за ваше время.
PS: Я также старался быть более щедрым на своем альфа-пороге, но это также не сработало (в случае, если моя прозрачность не была идеальной).
UPDATE:
Чтобы добавить немного больше деталей, я строю редактор уровней. Это означает, что я создам много узлов, в зависимости от того, что выбирает пользователь, и мне нужно иметь возможность выбирать/перемещать/вращать/и т. Д. Эти узлы. Я фактически использую SKSpriteNodes, так как мои PNG-изображения автоматически добавляются в xcassette таким образом. Я решил использовать ограничительную рамку Alpha Mask для PhysicalBody, поскольку это значение показано в редакторе сцен (Xcode), когда вы выбираете узел, а когда выбрано, Alpha Mask выделяет именно ту часть моего спрайта, что я хочу иметь возможность обнаружите прикосновение внутри.
Если я использую неправильные идеи/методы, скажите, пожалуйста. Это возможно, поскольку я только начинаю использовать Swift и SpriteKit.
UPDATE 2
переспросила я в physicsWord (как рекомендуется), чтобы получить право physicsBody и получил имя вложенного узла, как это:
let body = self.physicsWorld.bodyAtPoint(location)
print(body?.node?.name)
Но это еще печатая имя узла, даже если я касаюсь внешней рамки, что не имеет для меня никакого смысла.
Благодарю вас за помощь.
Вы нашли хороший способ сделать это? – Confused