使用SpriteKit的iPhoneX的屏幕尺寸问题

时间:2020-01-01 20:24:29

标签: swift iphone sprite-kit

在遵循Sprite Kit教程的同时,我注意到使用UIScreen.main.bounds可以获取除iPhoneX和11以外的大多数适用于iPhone尺寸的屏幕的范围。我编写了如下所示的快速测试,在此移动锚点指向CGPoint(x:0,y:0),然后从左边缘放置3个标签20、40和60点。除在iPhoneX上数字向左移动外,此功能正常运行。我在做什么错了?

GameScene类:SKScene,SKPhysicsContactDelegate {

let screenSize = UIScreen.main.bounds


var testLabel1: SKLabelNode!
var testLabel2: SKLabelNode!
var testLabel3: SKLabelNode!



override func didMove(to view: SKView) {

    print (screenSize)


    anchorPoint = CGPoint(x: 0, y: 0)
    testLabel1 = SKLabelNode(text: "1")
    testLabel1.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.left
    testLabel1 = initialiseLabel(label: testLabel1, position: CGPoint(x: 20, y: 50))
    testLabel2 = SKLabelNode(text: "2")
    testLabel2.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.left
    testLabel2 = initialiseLabel(label: testLabel2, position: CGPoint(x: 40, y: 50))
    testLabel3 = SKLabelNode(text: "3")
    testLabel3.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.left
    testLabel3 = initialiseLabel(label: testLabel3, position: CGPoint(x: 60, y: 50))
    self.addChild(testLabel1)
    self.addChild(testLabel2)
    self.addChild(testLabel3)

}

func initialiseLabel(label: SKLabelNode, position: CGPoint) -> SKLabelNode{
    label.position = position
    label.fontSize = 36
    label.fontName = "AmericanTypewriter-Bold"
    label.fontColor = UIColor.white
    return label
}

1 个答案:

答案 0 :(得分:1)

这是怎么回事,因为您使用的是默认场景大小,即768x1366。

然后在保持宽高比的同时缩放以填满手机的整个屏幕。

768x1366是9:16的比例。

X和设备上的设备不再符合9:16。实际上,它们现在更薄(根据您的方向更宽)

这意味着在纵向模式下,您将丢失左右两侧的信息,因为您要绘制的框要胖得多,并且多余的内容无法在屏幕上绘制。

要解决此问题,您将需要确定如何计划处理所有宽高比。

它们是3:4、9:16、6:13、512x683、139x199和207x448(好吧,苹果真的停止了关怀)

基本上,您应该开始考虑任何长宽比。

我个人建议您使用方形场景设计游戏环境,这样可以覆盖所有基础。

然后,您可以将UIKit用于需要安装到屏幕上某些位置的任何静态信息,而所有这些信息最终都不会使您的Sprite Kit引擎陷入困境。