使用SpriteKit调整iPhone X的大小

时间:2018-04-19 15:37:53

标签: ios swift sprite-kit

因此,Stack Overflow上有几十个关于在iPhone X上正确拟合SpriteKit场景的问题。但是,我找不到任何有差距的人。

有没有我可以只为iPhone X调整屏幕大小?或者我是否必须创建另一个场景,JUST让iPhone X适合屏幕?

以下是我使用.aspectFit获得的信息: enter image description here

我希望将该场景延伸到凹槽下方,并在屏幕角落曲线的正上方。我看到许多游戏非常适合,但还没有找到合适的解决方案。

注意:我无法使用aspectFill,因为游戏的某些部分不在视野范围内。

非常感谢任何链接或答案!

修改

resizeFill太大了,一切都变大了

我已经尝试了所有4个选项来调整屏幕大小,但没有人完成这项工作。有人有建议吗?

我觉得解决方案将以务实的方式完成,因为它需要相对于这些边界。

2 个答案:

答案 0 :(得分:0)

将此添加到您的代码中,它将为iPhone X和常规iPhone设置可玩游戏区域,然后使用gameArea常量来定义可以移动的距离。

//MARK: Playable Game Araa
let gameArea: CGRect

override init(size: CGSize) {
    if UIDevice().userInterfaceIdiom == .phone && UIScreen.main.nativeBounds.height == 2436 {
        //iPhone X
        let maxAspectRatio: CGFloat = 19.5/9.0
        let playableWidth = size.height / maxAspectRatio
        let margin = (size.width - playableWidth) / 2
        gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height)
    } else {
        let maxAspectRatio: CGFloat = 16.0/9.0
        let playableWidth = size.height / maxAspectRatio
        let margin = (size.width - playableWidth) / 2
        gameArea = CGRect(x: margin, y: 0, width: playableWidth, height: size.height)
    }

    super.init(size: size)
}

答案 1 :(得分:0)

我们(我和snapbackdev)找到了一个解决方案,适用于现在或任何未来的手机,可以将屏幕设置为适合整个视图,而无需拉伸或空格。

我们最终以编程方式完成所有工作,这使一切正常。

GameViewController.swift中,此代码加载GameScene

override func viewDidLoad() {
    super.viewDidLoad()

    if let view = self.view as! SKView? {

        // Load a GameScene with the size of the view
        let scene = GameScene(size: view.frame.size)

        // Set the scale mode to scale to fit the window
        scene.scaleMode = .aspectFill

        // Present the scene
        view.presentScene(scene)


        view.ignoresSiblingOrder = true
        view.showsFPS = true
        view.showsNodeCount = true

    }
}

这也可以在viewDidLayoutSubviews中完成,具体取决于您正在做什么。

GameScene.swift中设置场景所需的唯一代码是:

override func didMove(to view: SKView) {

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

    // Create the frame
    let frameEdge = SKPhysicsBody(edgeLoopFrom: frame)
    self.physicsBody = frameEdge

}