SpriteKit场景不适合iPhone X上的整个视图

时间:2017-09-15 11:35:32

标签: ios iphone sprite-kit

iPhone X几天前发布。我正在尝试将我的一个游戏更新到新手机。但是,在SpriteKit场景的一个场景中,场景不会缩放以填满整个屏幕。

以下是显示场景的代码:

GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"];
scene.scaleMode = SKSceneScaleModeFill;
// skView is basically self.view casted to SKView
[skView presentScene:scene];

SKS文件中场景的大小为2048x1536。

这就是它的样子:

Picture

红色部分是场景内容。一个有趣的事情是,背景(蓝色和灰色,确实可以正确显示。

无论如何解决这个问题?我只是伸展场景来填充显示器(没有任何东西被圆角和缺口覆盖)

2 个答案:

答案 0 :(得分:1)

SpriteKit游戏可能有更清洁的方法来支持iPhone X屏幕,但我为SKView推出了以下扩展程序:

public extension SKView {
    func isIphoneX() -> Bool {
        let screenHeight = 2436.0
        let screenWidth = 1125.0
        let iphoneXAspectRatio = screenHeight / screenWidth

        let aspectRatio = Double(self.frame.width/self.frame.height)
        return (aspectRatio == iphoneXAspectRatio) ? true : false
    }
}

用法:基本上它根据屏幕的宽高比设置缩放模式。如果它是iPhone X宽高比,则将缩放模式设置为" resizeFill"否则对于经典矩形iPhone和iPad屏幕使用" aspectFill"模式。

import SpriteKit

class GameViewController: UIViewController {

    // MARK: - View lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()

        guard let view = self.view as? SKView else { return }
        guard let scene = SKScene(fileNamed: "sceneName") else { return }
        scene.scaleMode = view.isIphoneX() ? .resizeFill : .aspectFill

        view.presentScene(scene)
    }
}

我发现resizeFill模式是使内容填满整个iPhone X屏幕而不会扭曲或剪掉场景内容的唯一方法。如果你在游戏中有一个HUD节点(分数,计数器,按钮等......)你也需要对它进行更改!

override func didMove(to view: SKView) {
   // Any additional setup... 
   ...

    if view.isIPhoneX {
        hud = SKReferenceNode(fileNamed: "yourIPhoneXHUDScene")
    } else {
        hud = SKReferenceNode(fileNamed: "yourStandardHUDScene")
    }

    cam.addChild(hud)
}

在模拟器中测试每个iPhone屏幕尺寸(3.5",4",4.7",5.5",5.8")。 但是,我不确定如何使用Xcode中设置的视网膜iPad尺寸(2048 x 1536)来处理gamecenes。

答案 1 :(得分:0)

aspectFill对我来说很好。场景被剪切在左侧和右侧,但没有扭曲。

我使用AutoLayout自动调整SKView的大小,然后使用aspectFill显示我的场景。