Sprite kit 为什么场景的布局在所有设备中都不相同

Sprite kit 为什么场景的布局在所有设备中都不相同,sprite-kit,Sprite Kit,**嗨 我想做一个砖块射击游戏,我开始做靠近屏幕边缘的边界线,我实现了代码(如下),它在所有设备上都应该是一样的,但当我在iPhone8上尝试时,一切都很好,当我在iPad或iPhonex上尝试时,它看起来不同,好像出于某种原因放大了 即使是标准的hello world标签也是一样的 你能帮帮我吗 谢谢** func crwalls(){ // for i in 1...3 { let spce = self.frame.width/12 let w

**嗨 我想做一个砖块射击游戏,我开始做靠近屏幕边缘的边界线,我实现了代码(如下),它在所有设备上都应该是一样的,但当我在iPhone8上尝试时,一切都很好,当我在iPad或iPhonex上尝试时,它看起来不同,好像出于某种原因放大了

即使是标准的hello world标签也是一样的

你能帮帮我吗

谢谢**

    func crwalls(){
    //        for i in 1...3 {
    let spce = self.frame.width/12
    let wall = SKSpriteNode(imageNamed: "liiine")
    wall.size = CGSize(width: 20, height: self.frame.height/1.5)
    wall.position = CGPoint(x: frame.minX + 30, y: frame.midY + (self.size.width/4) )
    wall.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: ((wall.size.width)), height: ((wall.size.height))))
    //floor.physicsBody?.categoryBitMask = floorbit
    wall.physicsBody?.isDynamic = false
    print("mmm")
    self.addChild(wall)

    let wall3 = SKSpriteNode(imageNamed: "liiine")
    wall3.size = CGSize(width: 20, height: self.frame.height/1.5)
    wall3.position = CGPoint(x: frame.maxX - 30, y: frame.midY + (self.size.width/4) )
    wall3.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: ((wall3.size.width)), height: ((wall3.size.height))))
    //floor.physicsBody?.categoryBitMask = floorbit
    wall3.physicsBody?.isDynamic = false
    print("mmm")
    self.addChild(wall3)
    let wall4 = SKSpriteNode(imageNamed: "liiine")
    wall4.size = CGSize(width: self.frame.width - 40, height: 20)
    wall4.position = CGPoint(x: self.frame.midX, y:       self.frame.maxY - spce)
    wall4.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: ((wall4.size.width)), height: ((wall4.size.height))))
    //floor.physicsBody?.categoryBitMask = floorbit
    wall4.physicsBody?.isDynamic = false
    print("mmm")
    self.addChild(wall4)

}
‘’’

是的,我同意,令人恼火的是,Xcode没有一个“全能选项”来完美地为所有不同的设备屏幕尺寸扩展所有内容

不过,您可能需要仔细研究一下,看看这些方法是否能给您带来更好的结果:

因此,您可以选择缩放模式的几个不同选项。与链接文档中列出的内容一起玩一玩。只需将GameViewController中突出显示的部分更改为您喜欢的部分

class GameViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

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

override var shouldAutorotate: Bool {
    return true
}

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    if UIDevice.current.userInterfaceIdiom == .phone {
        return .allButUpsideDown
    } else {
        return .all
    }
}

override var prefersStatusBarHidden: Bool {
    return true
}
}
简单回答“为什么场景的布局在所有设备中都不相同。”

因为那是不可能的。这就像在问为什么服装店不能只卖1号的衣服

屏幕有各种形状和大小,因此由您决定它对用户的显示方式

最简单的解决方案是使用正方形场景构建游戏。这将涵盖所有方面,包括高和宽

当然,这对实际的游戏来说可能并不理想,因为你可能会失去更多你想要的场景


另一个解决方案是使SKView成为场景的倒数比率,并在视图上使用.aspectFill。这将使您的侧边在更宽的设备上显示更多信息,但您的高设备将接收到您希望他们看到的信息量。

thx为您提供帮助,我尝试过。aspectfit在所有设备上都工作得很好,但在某些设备上显示了黑色空间。有什么办法克服这一问题吗?aspectFill是您的“全部操作选项”,可以完美地缩放所有不同的设备屏幕尺寸。@Heyguys,如果您支持所有设备,那么您需要将场景构建为正方形。如果你只是为高个子设备建造场景,那么你需要以812/375的比例建造场景(感谢苹果)。