所以我正在使用Spritekit为iPhone开发Xcode游戏。通过使用node.setScale()方法,它在所有iPhone设备上看起来都很相似。现在我想在iPad上制作通用和可运行的。我怎么这么容易?是否有一些规模公式?
我已经尝试过的是:
if UIDevice.current.userInterfaceIdiom == .pad {
sscale = frame.size.height / 768
}else{
sscale = frame.size.height / 320
}
然后为每个节点创建node.setScale(sscale)。
这最终无法正常工作,因为在iPad Mini上它看起来与iPad Air不同......即节点尺寸和位置......
任何帮助?
答案 0 :(得分:4)
你基本上有两个选择。
1)将场景大小设置为1024X768(横向)或768x1024(纵向),并使用默认的.aspectFill进行缩放模式。这是Xcode 7(iPad分辨率)中的默认设置。
您通常只会在iPad的顶部/底部(横向)或左/右(纵向)显示一些额外的背景。
在iPad上显示更多内容的游戏示例:
Altos Adventure,Leos Fortune,Limbo,The Line Zen,Modern Combat 5.
2)Apple将xCode 8中的默认场景大小更改为iPhone 6/7(750 * 1334-Portait,1337 * 750-Landscape)。此设置将在iPad上裁剪您的游戏。
两个选项之间的选择取决于你,取决于你正在制作的游戏。我通常更喜欢使用选项1并在iPad上显示更多背景。
无论场景大小比例模式通常最好保留在默认设置.aspectFill或.aspectFit
要调整设备的标签等特定内容,您可以这样做
if UIDevice.current.userInterfaceIdiom == .pad {
// adjust some UI for iPads
}
我不会尝试在差异设备上手动更改场景或节点大小/比例的随机黑客,你应该让xCode / SpriteKit为你做。
希望这有帮助
答案 1 :(得分:1)
如果您使用SKCameraNode
,则可以通过缩放相机来缩放整个场景。
// SKCameraNode+Extensions.swift
extension SKCameraNode {
func updateScaleFor(userInterfaceIdiom: UIUserInterfaceIdiom) {
switch userInterfaceIdiom {
case .phone:
self.setScale(0.75)
case .pad:
self.setScale(1.0)
default:
break
}
}
}
然后在场景初始化时调用它。
guard let camera = self.childNode(withName: "gameCamera") as? SKCameraNode else {
fatalError("Camera node not loaded")
}
// Update camera scale for device / orientation
let userInterfaceIdiom = UIDevice.current.userInterfaceIdiom
camera.updateScaleFor(userInterfaceIdiom: userInterfaceIdiom)