Spritekit как выборочно масштабировать узлы

в качестве фона предположим, что у меня есть карта - буквально дорожная карта, отображаемая внутри моей SKScene. Дороги представлены SKShapenodes с путем, установленным в массив CGPoints. Я хочу, чтобы пользователь мог увеличивать/уменьшать масштаб, поэтому я создал узел камеры:

var cam: SKCameraNode = SKCameraNode()

и поскольку пользователь хочет увеличивать/уменьшать масштаб, прокручивая трекпад:

let zoomInAction = SKAction.scale(to: CGFloat(scale), duration: 0.0)
camera?.run(zoomInAction)

Это прекрасно работает, однако у меня есть дополнительная сложность, с которой я не уверен, как справиться. Я хочу, чтобы некоторые узлы (например, метки с названиями дорог, значки, легенда карты) были освобождены от масштабирования, чтобы при увеличении/уменьшении масштаба пользователем метка с названием дороги оставалась того же размера, а форма дороги масштабировалась пропорционально.

Не знаете, как с этим справиться? Могу ли я иметь иерархию сцен, чтобы один слой масштабировался, а другой не масштабировался? Можно ли этого добиться, присоединив узел камеры к «масштабируемому» слою? Любая помощь приветствуется!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
162
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот случай. Если вы хотите, чтобы масштаб узла не менялся вместе с камерой, просто добавьте узел в дерево камеры. Не забудьте добавить 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:) и т. д.

Другие вопросы по теме