如果您在Xcode中创建了一个新的游戏模板项目,默认的GameViewController
将使用以下初始化程序实例化游戏场景:
let scene = SKScene(fileNamed: "GameScene")
初始化器在模板文件中的使用表明,这是苹果创建SKScene
的推荐方法。但是,我在堆栈溢出上看到了许多使用init(size:)
初始化程序或简单的SKScene()
的示例。
我想知道创建SKScene
实例的最佳方法是什么,每种方法的优缺点是什么,以及在使用一种方法与另一种方法时需要注意的各种缺陷。
我问这个问题的原因是我使用init(fileNamed:)
创建了我的游戏场景并构建了第1级。后来,当我试图使用init(size:)
为第2级创建另一个场景时,我遇到了一些问题。也就是说,如果我使用UIScreen
而不是init(fileNamed:)
创建场景,那么使用init(size:)
和场景的帧进行的一些位置计算似乎会产生不同的结果。
在更一般的意义上,我想听取一些非常熟悉使用iOS和SpriteKit的人对他们首选的初始化新SKScene
的方法的意见,以及使用不同方法的利弊。
发布于 2017-11-14 12:00:26
我强烈建议不要使用init(size:)
来创建作为游戏一部分的场景。你真的应该试着把设计和结构分开。这允许你改变你的游戏布局,而不改变任何代码,从而减少潜在的错误。
尽管如此,有一个非常常见的实践教程使用类似于这个init(size:view.size)
。这会给游戏设计者带来各种各样的麻烦,并破坏了SpriteKit提供的多个设备的简单处理。人们最终倾向于在0..1坐标系中结束,在定位节点时在任何地方都放置分界,这也会导致错误,因为人们最终可能会忘记某个地方的鸿沟,或者在表示高度时使用宽度。
SKScenes有4种比例模式,用于处理场景在每个设备上的外观,并且在使用该工具开发游戏时应该始终考虑到这一点。它确实应该是第一件被讨论的事情,这样人们才能理解它背后的力量。
我建议使用init(size:)
的唯一一次是当您需要创建一个无法通过sprite工具包构建器实现的动态场景时,以及当您已经建立了窗口的静态大小时。
https://stackoverflow.com/questions/47276888
复制相似问题