首页 > 解决方案 > 您如何将节点位置调整为横向和纵向

问题描述

我正在尝试制作一个通用的游戏板,可以在 ipad/iphone 上以纵向或横向方式播放。瓷砖在纵向看起来不错,但是当我切换到横向时,它会被切断。我怎样才能确保董事会始终居中?

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
}
}

它看起来像这样:

在此处输入图像描述

在此处输入图像描述

标签: iosswiftsprite-kitpositionorientation

解决方案


我会将场景比例模式从 更改scene.scaleMode = .resizeFillscene.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
        }
    }
}

推荐阅读