Как вы адаптируете положение своих узлов к пейзажу и портрету? - PullRequest
0 голосов
/ 21 ноября 2018

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

override func didMove(to view: SKView) {

let numRows = 7
let numCols = 7
var counter = 0
let squareSize = CGSize(width: view.bounds.width/7, height: view.bounds.width/7)

for row in 0..<numRows{
    for col in 0..<numCols {
        if counter == 49 {
            break
        }
        let spriteNode = SKSpriteNode(imageNamed: "piece\(counter)")
        spriteNode.size = squareSize
        spriteNode.position = CGPoint(x: 0-(frame.width*0.43)+(CGFloat(col)*spriteNode.size.width), y: -CGFloat(row)*spriteNode.size.height + frame.height/3 )
        addChild(spriteNode)
        counter = counter+1
    }
}
}

override func viewDidLoad() {
super.viewDidLoad()

if let view = self.view as! SKView? {
    if let scene = SKScene(fileNamed: "GameScene") {
        scene.scaleMode = .resizeFill
        view.presentScene(scene)
    }
    view.ignoresSiblingOrder = true
    view.showsFPS = true
    view.showsNodeCount = true
}
}

Это выглядит так:

enter image description here

enter image description here

1 Ответ

0 голосов
/ 21 ноября 2018

Я бы изменил режим шкалы сцены с scene.scaleMode = .resizeFill на scene.scaleMode = .aspectFit.В игре размер кадра SKView не требуется, и вы можете работать в своем собственном координатном пространстве (свойство размера сцены), например, установить значение 100 x 100. -> Настройка Interface Builder.

Не связывайте ничегона раме / границах SKView.Код из вашего контроллера сцены должен работать так, как показано ниже, и все это связано с размером сцены.

override func didMove(to view: SKView) {

    let numRows = 7
    let numCols = 7
    var counter = 0
    let squareSize = CGSize(width: size.width/7, height: size.width/7)

    for row in 0..<numRows{
        for col in 0..<numCols {
            if counter == 49 {
                break
            }
            let spriteNode = SKSpriteNode(imageNamed: "piece\(counter)")
            spriteNode.size = squareSize
            spriteNode.position = CGPoint(x: 0-(size.width*0.43)+(CGFloat(col)*spriteNode.size.width), y: -CGFloat(row)*spriteNode.size.height + size.height/3 )
            addChild(spriteNode)
            counter = counter+1
        }
    }
}
...