iOS通用设备应用与SpriteKit,如何缩放所有视图的节点?

我想创build一个横向应用程序通用的 ,以便Sprite节点按比例缩放任何视图大小运行的应用程序。 我想要一个完全程序化的解决scheme,因为我不喜欢IB。

我的游戏非常简单,我不需要任何滚动或缩放,所以整个游戏将始终存在并占据整个视图。

我在寻找的可能是改变场景的大小,以适应视图? 如果是这样,你能解释一下,因为我试图改变我的视图控制器的这一部分

if let scene = GameScene(fileNamed:"GameScene") 

成为构造函数的方法,把尺寸作为参数,但Xcode不喜欢这一点。


我试过的东西

  1. 使用self.view.bounds.width / height的分数。 这通常会使所有的iPhone看起来不错,但在iPad上延伸和扭曲节点以及周围的边框。
  2. 在所有四种types中改变scaleMode。 我想保持良好的实践和感觉.AspectFill(默认)是我应该使我的应用程序的工作,但开放的build议。 注意; 我不想在任何设备上出现黑边,只是按比例显示/缩放整个视图。
  3. 应用程序化约束。 现在我对这个还比较陌生,完全不了解约束条件,但是我从RayWenderlich那里看到的任何教程都没有提到关于节点约束的教程,所以我没有深入研究这个问题。
  4. 使用这样的方法来转换点之间的点。 这实际上对于节点的定位非常有效,如果可能的话,我希望这个方法能够解决,但是我仍然有节点大小的问题。 另外当我用这种方法为iPad构build视图似乎开始作为肖像和节点看起来不错,但我必须手动切换到风景和精灵和视图边界再次弄乱。 这里的方法是:

     func convert(point: CGPoint)->CGPoint { return self.view!.convertPoint(CGPoint(x: point.x, y:self.view!.frame.height-point.y), toScene:self) } 
  5. 在RW和互联网上的其他地方无数的video教程。

提前致谢! 我感谢帮助。 我知道这个话题很奇怪,因为很多人对此提出质疑,但是每个人的情况似乎都不一样,以至于一个解决scheme并不适合所有人。

我最初试图用2场比赛来缩放自己,这只是疯狂(场景大小=视图大小或场景缩放模式= .ResizeFill)。 你必须调整所有的值,例如所有设备的字体大小,精灵大小,冲动等,它将永远不会一致。

所以你基本上有2个选项

1)将场景尺寸设置为1024X768(横向)或768×1024(纵向)。 这是Xcode 7的默认设置。

你通常只在iPad上的顶部/底部(横向)或左/右(纵向)显示一些额外的背景,这些背景会在iPhones上裁切。

在iPhones的iPad上显示更多的游戏示例:

阿尔托斯冒险,青奥运财富,林波,线禅,现代战争5。

2) Apple将xCode 8中的默认场景大小更改为iPhone 6/7(750 * 1334-Portait,1337 * 750-Landscape)。 这个设置会在iPad上裁剪你的游戏。

在iPad上显示较less的游戏示例:

卢米诺城,机器人独angular兽攻击

两种select之间的select取决于你,取决于你正在做什么游戏。 我通常更喜欢使用选项1,并在iPad上显示更多背景。

无论场景大小,缩放模式通常最好保留在.aspectFill的默认设置下。

调整标签等特定的东西,你可以这样做

  if UIDevice.current.userInterfaceIdiom == .pad { ... } 

您可以尝试自己的场景缩放,创build一个新的SpriteKit示例游戏项目。 在所有iPhone上运行,您会注意到HelloWorld标签在所有设备上看起来都很完美。

现在将默认设置更改为scene size = frame或者使用.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。 我将场景尺寸设置为1334×750,并使用纵横比作为缩放模式。 我比运行一些代码,如果需要例如iPad或iPhone X,我想要显示更多的背景去除黑条。 这是基于这个伟大的文章。

http://endlesswavesoftware.com/blog/spritekit-skscene-scalemode/