如果您在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
的方法以及专业人士的看法的意见。使用不同方法的缺点。
答案 0 :(得分:2)
我非常强烈建议您不要在创建用作游戏一部分的场景时使用init(size:)
。你真的应该尝试将设计与结构分开。这允许您在不更改任何代码的情况下更改游戏布局的方式,从而减少错误的可能性。
话虽如此,有一个非常常见的练习教程,看起来像init(size:view.size)
。这会给游戏设计师带来各种麻烦,并破坏SpriteKit提供的多种设备的简单处理。人们倾向于在0..1坐标系中结束,在定位节点时到处都是分歧,这也会导致错误,因为人们可能会忘记某处的分界,或者当他们意味着高度时使用宽度。
SKScenes有4种缩放模式,可以处理场景在每台设备上的外观,在使用此工具开发游戏时应始终考虑到这一点。它应该是第一个被讨论的东西,以便人们能够理解它背后的力量。
我建议使用init(size:)
的唯一一次是当你需要创建一个无法通过sprite kit构建器实现的动态场景时,以及当你已经建立了窗口的静态大小时。