创建SKScene,init(fileNamed :) vs init(size :)

时间:2017-11-14 02:49:32

标签: ios swift sprite-kit initialization skscene

如果您在Xcode中制作新的游戏模板项目,默认的GameViewController将使用以下初始化程序来实例化游戏场景:

let scene = SKScene(fileNamed: "GameScene")

初始化程序在模板文件中的使用表明这是Apple推荐的创建SKScene的方法。但是,我在Stack Overflow上看到了许多使用init(size:)初始化程序或简单SKScene()的示例。

我想知道哪个是创建SKScene实例的最佳方式,以及每种方式的优点/缺点,以及使用一种方法与另一种方法时要注意的各种缺陷。

我的理由是我使用init(fileNamed:)来创建我的游戏场景并构建关卡1.当我后来尝试使用init(size:)为关卡2创建另一个场景实例时,我遇到了问题。也就是说,如果使用UIScreen而不是init(size:)创建场景,使用init(fileNamed:)和场景框架的某些位置计算似乎会产生不同的结果。

从更广泛的意义上讲,我想听听那些非常熟悉使用iOS和SpriteKit的人对他们首选初始化新SKScene的方法以及专业人士的看法的意见。使用不同方法的缺点。

1 个答案:

答案 0 :(得分:2)

我非常强烈建议您不要在创建用作游戏一部分的场景时使用init(size:)。你真的应该尝试将设计与结构分开。这允许您在不更改任何代码的情况下更改游戏布局的方式,从而减少错误的可能性。

话虽如此,有一个非常常见的练习教程,看起来像init(size:view.size)。这会给游戏设计师带来各种麻烦,并破坏SpriteKit提供的多种设备的简单处理。人们倾向于在0..1坐标系中结束,在定位节点时到处都是分歧,这也会导致错误,因为人们可能会忘记某处的分界,或者当他们意味着高度时使用宽度。

SKScenes有4种缩放模式,可以处理场景在每台设备上的外观,在使用此工具开发游戏时应始终考虑到这一点。它应该是第一个被讨论的东西,以便人们能够理解它背后的力量。

我建议使用init(size:)的唯一一次是当你需要创建一个无法通过sprite kit构建器实现的动态场景时,以及当你已经建立了窗口的静态大小时。