我最初尝试用 2 个游戏自己进行缩放,这简直太疯狂了(场景大小 = 视图大小或场景缩放模式 = .ResizeFill)。您必须调整所有设备的所有值,例如字体大小、精灵大小、脉冲等,并且它永远不会一致。
所以你基本上有2个选择
1)将场景尺寸设置为 1024X768(横向)或 768x1024(纵向)。这是 Xcode 7 中的默认设置。
通常,您只是在 iPad 上的顶部/底部(横向)或左/右(纵向)显示一些额外的背景,这些背景在 iPhone 上会被裁剪。
在 iPad 上显示更多内容/在 iPhone 上裁剪的游戏示例:
《阿尔托的冒险》、《利奥的财富》、《地狱边境》、《一线禅》、《现代战争 5》。
2)Apple 将 xCode 8 中的默认场景尺寸更改为 iPhone 6/7 (7501334-肖像,1337750-风景)。此设置将在 iPad 上裁剪您的游戏。
在 iPad 上显示较少的游戏示例:
卢米诺城,机器人独角兽袭击
这两个选项之间的选择取决于您,并且取决于您正在制作的游戏。我通常更喜欢使用选项 1,并在 iPad 上显示更多背景。
无论场景大小如何,缩放模式通常最好保留 .aspectFill 的默认设置。
要调整特定的东西,例如标签等,你可以这样做
if UIDevice.current.userInterfaceIdiom == .pad {
...
}
您可以自己尝试缩放场景,创建一个新的 SpriteKit 示例游戏项目。在所有 iPhone 上运行,您会发现 HelloWorld 标签在所有设备上看起来都很完美。
现在将默认设置更改为场景大小 = 帧或使用 .ResizeFill,HelloWorld 标签在所有设备上不再正确缩放。
作为旁注,该行
if let scene = GameScene(fileNamed: "GameScene")
引用 GameScene.sks 文件。您说您以编程方式完成所有操作,因此您可以删除 GameScene.sks 文件并将该行更改为
let skView = view as! SKView!
let scene = GameScene(size: CGSize(width: 1024, height: 768)) // 768 x 1024 if portrait
Update:
我现在使用稍微不同的变体,因为我在将游戏适应 iPhoneX 时遇到问题。我将场景大小设置为 1334x750 并使用宽高比适合作为缩放模式。如果需要的话,我会运行一些代码来删除黑条,例如在 iPad 或 iPhone X 上。它基于这篇很棒的文章(链接不再有效)。
http://endlesswavesoftware.com/blog/spritekit-skscene-scalemode/