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



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

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

这里发生的事情是你使用的是默认场景大小,即 768x1366。

然后,它在保留纵横比的同时进行缩放,以填满手机的整个屏幕。

768x1366 的比例为 9:16。

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

这意味着您将在纵向模式下丢失左侧和右侧的信息,因为您正在绘制一个更胖的框,并且无法在屏幕上绘制额外的内容。

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

它们是 3:4、9:16、6:13、512x683、139x199 和 207x448(哦,苹果真的不在乎了(

基本上,您应该开始考虑任何纵横比。

我个人建议你使用正方形场景来设计你的游戏环境,这样你就覆盖了所有的基础。

然后,您可以将 UIKit 用于需要挂载到屏幕上某些位置的任何静态信息,并且所有这些信息最终都不会使您的精灵套件引擎陷入困境。

最新更新