我想使 Landscape 应用程序具有 通用性 ,以使Sprite节点与运行该应用程序的任何视图大小成比例地缩放。我想要一个 完全编程的 解决方案,因为我不喜欢IB。
我的游戏非常简单,不需要任何形式的滚动或缩放,因此整个游戏将始终存在并占据整个视图。
我所寻找的可能是更改场景的大小以始终适合视图吗?如果是这样,您可以彻底解释一下吗,因为我尝试更改视图控制器的这一部分
if let scene = GameScene(fileNamed:"GameScene")
成为将大小作为参数的构造方法,但Xcode不喜欢那样。
我尝试过的事情
使用这样的方法在视图之间转换点。对于节点的点定位,这实际上非常有效,并且如果可能的话,我希望这种方法可以解决,但是我仍然遇到节点大小的问题。同样,当我使用这种方法为iPad构建视图时,视图似乎从纵向开始,节点看起来很好,但随后我不得不手动将其切换为横向,并且精灵和视图边界再次被弄乱了。方法如下:
func convert(point: CGPoint)->CGPoint { return self.view!.convertPoint(CGPoint(x: point.x, y:self.view!.frame.height-point.y), toScene:self)
}
关于RW以及互联网上其他任何地方的无数vid教程。
提前致谢!感谢您的帮助。我知道这个话题很奇怪,因为很多人对此提出疑问,但是每个人的情况似乎都不同,以至于一个解决方案不能完全适用。
我最初尝试自己用2个游戏进行缩放,但这只是疯狂(场景大小=视图大小或场景缩放模式= .ResizeFill)。您必须为所有设备调整所有值,例如字体大小,子画面大小,脉冲等,并且永远不会保持一致。
所以你基本上有2个选择
1) 将场景尺寸设置为1024X768(横向)或768x1024(纵向)。这是Xcode 7中的默认设置。
您通常不会在iPad的顶部/底部(横向)或左/右(人像)/显示一些额外的背景,而这些背景会在iPhone上裁剪。
在iPad上显示更多内容/在iPhone上显示更多内容的游戏示例:
Altos Adventure,Leos Fortune,Limbo,The Line Zen,Modern Combat 5。
2) 苹果将xCode 8中的默认场景大小更改为iPhone 6/7(750 * 1334-Portait,1337 * 750-Landscape)。此设置将在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
更新:
我现在使用的是略有不同的变体,因为我无法将游戏适应iPhoneX。我将场景大小设置为1334x750,并使用宽高比作为缩放模式。然后,我需要运行一些代码来删除黑条,例如iPad或iPhone X,因为我希望显示更多背景。它基于这篇出色的文章。
http://endlesswavesoftware.com/blog/spritekit-skscene- scalemode/