в качестве фона предположим, что у меня есть карта - буквально дорожная карта, отображаемая внутри моей SKScene. Дороги представлены SKShapenodes с путем, установленным в массив CGPoints. Я хочу, чтобы пользователь мог увеличивать/уменьшать масштаб, поэтому я создал узел камеры:
var cam: SKCameraNode = SKCameraNode()
и поскольку пользователь хочет увеличивать/уменьшать масштаб, прокручивая трекпад:
let zoomInAction = SKAction.scale(to: CGFloat(scale), duration: 0.0)
camera?.run(zoomInAction)
Это прекрасно работает, однако у меня есть дополнительная сложность, с которой я не уверен, как справиться. Я хочу, чтобы некоторые узлы (например, метки с названиями дорог, значки, легенда карты) были освобождены от масштабирования, чтобы при увеличении/уменьшении масштаба пользователем метка с названием дороги оставалась того же размера, а форма дороги масштабировалась пропорционально.
Не знаете, как с этим справиться? Могу ли я иметь иерархию сцен, чтобы один слой масштабировался, а другой не масштабировался? Можно ли этого добиться, присоединив узел камеры к «масштабируемому» слою? Любая помощь приветствуется!





Вот случай. Если вы хотите, чтобы масштаб узла не менялся вместе с камерой, просто добавьте узел в дерево камеры. Не забудьте добавить cameraNode в сцену, иначе те узлы, которые подключены к камере, не будут отображаться.
Далее label визуализируется с помощью камеры и не меняет масштаб.
let label = SKLabelNode.init(text: "GFFFGGG")
label.fontSize = 30
label.fontColor = UIColor.black
label.name = "cool"
label.zPosition = 100
let camera = SKCameraNode()
camera.addChild(label)
scene.addChild(camera)
scene.camera = camera
camera.position = CGPoint.init(x: 0, y: 0)
camera.xScale = 2.0
Если у вас есть ноды, ранее подключавшиеся к сцене,
вы можете удалить узел из родителя, а затем добавить в камеру.
Использование функции для пакетной обработки не должно быть таким сложным, как предполагалось.
Может и не нужно:
Вы можете перенести их в дерево cameraNode через camera.convert(point: , from:) и т. д.