Как масштабировать SKNodes при увеличении или уменьшении? - PullRequest
1 голос
/ 29 апреля 2020

Я реализовал функцию масштабирования, но узлы, которые я использую для перемещения игрока, стрелки, указывающие в направлении движения игрока, остаются неизменными, и я не могу понять, как их пропорционально масштабировать, поэтому, если я При увеличении масштаба кнопки уменьшаются и перемещаются ближе к плееру, чтобы оставаться на экране, и наоборот при уменьшении масштаба.

Вот код, который я написал для увеличения:

@objc func handlePinch(sender: UIPinchGestureRecognizer) {
    guard sender.view != nil else { return }

    if sender.state == .began || sender.state == .changed {
        sender.view?.transform = (sender.view?.transform.scaledBy(x: sender.scale, y: sender.scale))!
        sender.scale = 1.0
    }
}
let pinch = UIPinchGestureRecognizer(target: self, action: #selector(handlePinch(sender:)))
view.addGestureRecognizer(pinch)

1 Ответ

0 голосов
/ 29 апреля 2020

Используете ли вы SpriteKit?

Если это возможно, вы можете работать с масштабом узла камеры для реализации функции "масштабирования": https://developer.apple.com/documentation/spritekit/skcameranode/getting_started_with_a_camera

@objc func handlePinch(sender: UIPinchGestureRecognizer) {
    guard sender.view != nil else { 
        return 
    }

    if sender.state == .began || sender.state == .changed {
        self.camera.xScale = sender.scale
        self.camera.yScale = sender.scale
    }
}

Apple's сделайте c поговорку:

Поскольку камера является узлом, вы определяете ее положение в сцене, как и любой другой узел. Действия, физика и поведение GameplayKit также могут быть применены к узлу камеры. Когда сцена визуализируется с использованием узла камеры, происходит следующее: Сцена отображается так, что источник узла камеры размещается в середине сцены. Инверсия свойств xScale, yScale и zRotation узла камеры применяется ко всем узлам сцены.

вам, вероятно, следует инвертировать значение масштаба отправителя: self.camera.xScale = -sender.scale

...