спрайтекит как выборочно масштабировать узлы - PullRequest
0 голосов
/ 15 марта 2019

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

var cam: SKCameraNode = SKCameraNode()

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

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

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

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

1 Ответ

1 голос
/ 15 марта 2019

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

...