Не удается заставить свойство centerRect SKSpriteNode работать - PullRequest
0 голосов
/ 14 октября 2018

Это просто.Я установил centerRect моего спрайта, как описано в документации Apple, но отображаемое на нем изображение искажается (так как я не определил свойство centerRect).Мой код:

let sprite = SKSpriteNode()
sprite.texture = SKTexture(imageNamed: "ImageName")
sprite.centerRect = CGRect(x: 0.49, y: 0.49, width: 0.02, height: 0.02)
sprite.scale(to:CGSize(width: myCustomWidth, height: myCustomHeight))
//sprite.size = CGSize(width: myCustomWidth, height: myCustomHeight)

Я не знаю, где я допустил ошибку или в моем коде чего-то не хватает.

Вот как это выглядит

Это то, что я хочу

Заранее спасибо.

1 Ответ

0 голосов
/ 14 октября 2018

Зависит от ширины и высоты, аналог должен искажаться.Центральная часть составляет всего 2% * 2% изображения и является основной частью масштабирования во время операций масштабирования.

Вы можете изобразить, что четыре угла не изменятся, поэтому центральная часть может сильно искажаться, если масштабировать до (2X * 2X) исходного изображения, то есть от (0,02 * 0,02 -> 1,02 * 1,02),это более чем 2500-кратное искажение в центре изображения.

Ваш код не имеет проблем.

До сих пор концепция верна.Если вы не можете получить то, что хотите, возможно, это размер исходного изображения.

sprite.texture = SKTexture(imageNamed: "ImageName")
print (sprite.texture?.size()) // If size is very large here, then you cannot get what you want. The size of image should be small than target.  Actually only when you zoom in the texture, i.e, the current size is smaller than CGSize(width: myCustomWidth, height: myCustomHeight), you may get the result.

sprite.centerRect = CGRect(x: 0.49, y: 0.49, width: 0.02, height: 0.02)
sprite.scale(to:CGSize(width: myCustomWidth, height: myCustomHeight))
sprite.size = CGSize(width: myCustomWidth, height: myCustomHeight)

Последняя часть - мой код тестирования.

 class TestViewController: UIViewController{


        @IBOutlet weak var skview: SKView!

        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
            let sprite1 = SKSpriteNode()
            sprite1.texture = SKTexture(imageNamed: "round.png")
            print (sprite1.texture?.size())
            sprite1.centerRect = CGRect(x: 0.49, y: 0.49, width: 0.02, height: 0.02)
            print (sprite1.size)
            sprite1.scale(to:CGSize(width: 300, height:100))
            sprite1.size = CGSize(width: 300, height: 100)
            print (sprite1)
            skview.scene?.addChild(sprite1)
        }}

enter image description here

...