在遵循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
}
答案 0 :(得分:1)
这是怎么回事,因为您使用的是默认场景大小,即768x1366。
然后在保持宽高比的同时缩放以填满手机的整个屏幕。
768x1366是9:16的比例。
X和设备上的设备不再符合9:16。实际上,它们现在更薄(根据您的方向更宽)
这意味着在纵向模式下,您将丢失左右两侧的信息,因为您要绘制的框要胖得多,并且多余的内容无法在屏幕上绘制。
要解决此问题,您将需要确定如何计划处理所有宽高比。
它们是3:4、9:16、6:13、512x683、139x199和207x448(好吧,苹果真的停止了关怀)
基本上,您应该开始考虑任何长宽比。
我个人建议您使用方形场景设计游戏环境,这样可以覆盖所有基础。
然后,您可以将UIKit用于需要安装到屏幕上某些位置的任何静态信息,而所有这些信息最终都不会使您的Sprite Kit引擎陷入困境。