Как установить anchorPoint of view на 0,5, 0,5, чтобы получить вид в центре экрана? (Не сцена) - PullRequest
0 голосов
/ 02 января 2019

Я хочу сделать мою игру полноэкранной, а не с черными полосами с обеих сторон и снизу.поэтому я нашел этот код для этого, и он работает для сцены, и теперь он на весь экран, но ресурсы расположены неправильно.Из-за того, что координаты вида разные (не знаю, почему, может быть, из-за того, что ранее я пытался установить все для safeAreaLayoutGuide, но затем я получаю черные полосы).Так есть ли способ установить его обратно на 0,5 0,5.В противном случае мне придется вернуть anchorPoint сцены к тому, что когда-либо было anchorPoint представления и установить все активы в моем файле sks в соответствии с этим.

Вот код из GameViewController:

class GameViewController: UIViewController {

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()

        if let view = self.view as! SKView? {
            view.ignoresSiblingOrder = true
            view.showsFPS = true
            view.showsNodeCount = true

            let scene = HomeScene(size: view.bounds.size)
            scene.scaleMode = .aspectFill
            view.presentScene(scene)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        print("---")
        print("∙ \(type(of: self))")
        print("---")
    }
}

этот код из HomeScene:

let rectangle1 = SKShapeNode(rect: (self.view?.bounds)!)
rectangle1.strokeColor = .white
rectangle1.lineWidth = 20
addChild(rectangle1)

// Set (0, 0) as the centre of the screen
scene?.anchorPoint = CGPoint(x: 0.5, y: 0.5)

let rectangle = SKShapeNode(rect: self.frame)
rectangle.strokeColor = .green
rectangle.lineWidth = 20
addChild(rectangle)

Вот как выглядит сцена на 0,5, 0,5, но вид выше, что зеленый - это сцена, а белый - это вид и кнопка всередина обзора:

enter image description here

Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Если вы загружали HomeScene из файла .sks, для anchorPoint был установлен xcode на (0.5, 0.5), как показано на моем изображении.

enter image description here

Но когда вы пытаетесь создать пользовательский класс без загрузки его из файла (.sks), у вас не будет свойств, установленных здесь. Так что вам нужно установить вручную.

let scene = HomeScene(size: view.bounds.size) 
// at this point, you HomeScene has the anchorPoint set to (0.0, 0.0)

// lets set it back to (0.5, 0.5) as we want
scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
scene.scaleMode = .aspectFill
view.presentScene(scene)
0 голосов
/ 05 января 2019

Вы можете исправить проблему с другой привязкой, или вы можете расположить белый узел 'view' по-разному в сцене.

Информация о системе координат (и точках привязки): документация apple

Положение анкера по умолчанию составляет (0,5, 0,5) в соответствии с документацией.Чтобы поместить белый вид внизу слева: вычтите половину ширины и высоты x и y.Обратите внимание, что ширина линии также влияет на позиционирование.Расположите белый вид слева внизу:

let bottomLeft: CGPoint = CGPoint(x: -self.size.width/2 + rectangle1.lineWidth/2,
                                  y: -self.size.height/2 + rectangle1.lineWidth/2)
rectangle1.position = bottomLeft

Чтобы отцентрировать белый вид на зеленом виде, вычтите ширину и высоту прямоугольника1 (снова обратите внимание на ширину линии)

let center: CGPoint = CGPoint(x: -rectangle1.frame.size.width/2 + rectangle1.lineWidth/2,
                              y: -rectangle1.frame.size.height/2 + rectangle1.lineWidth/2)
rectangle1.position = center

Обратите внимание, что ваш зеленый вид выше белого.Установите положение z белого вида на некоторое положительное число, чтобы расположить его над зеленым видом

rectangle1.zPosition = 1
...