创建 SKScene,init(fileNamed:) 与 init(size:)
Creating SKScene, init(fileNamed:) vs init(size:)
如果您在Xcode中创建一个新的游戏模板项目,默认GameViewController
将使用以下初始化程序来实例化游戏场景:
let scene = SKScene(fileNamed: "GameScene")
初始化器在模板文件中的使用表明这是 Apple 推荐的创建 SKScene
的方法。但是,我在 Stack Overflow 上看到许多使用 init(size:)
初始化程序或简单地使用 SKScene()
.
的示例
我想知道创建 SKScene
实例的最佳方法是什么,每种方法的 advantages/disadvantages 是什么,以及使用一种方法与使用一种方法时需要注意的各种陷阱另一个。
我问的原因是我使用 init(fileNamed:)
创建我的游戏场景并构建级别 1。当我后来尝试使用 init(size:)
创建级别 2 的场景的另一个实例时,我运行 成问题。也就是说,如果我使用 init(size:)
而不是 init(fileNamed:)
.
创建场景,使用 UIScreen
和场景框架的一些位置计算似乎会产生不同的结果
在更一般的意义上,我想听听非常熟悉使用 iOS 和 SpriteKit 的人关于他们初始化新 SKScene
的首选方式的意见以及优点 &使用不同方法的缺点。
我强烈建议在创建游戏场景时不要使用 init(size:)
。您确实应该尝试将设计与结构分开。这允许您更改游戏的布局方式,而无需更改任何代码,从而减少出现错误的可能性。
话虽如此,有一个非常常见的练习教程使用,看起来像这样 init(size:view.size)
。这给游戏设计者带来了各种各样的麻烦,并破坏了 SpriteKit 提供的对多种设备的简单处理。人们倾向于在 0..1 坐标系中结束,在定位节点时到处放置分界线,这也会导致错误,因为人们可能最终会忘记某处的分界线,或者当他们意味着高度时使用宽度。
SKScenes 有 4 种缩放模式来处理场景在每个设备上的外观,在使用此工具开发游戏时应始终考虑到这一点。它真的应该是第一个被讨论的东西,这样人们才能理解它背后的力量。
我唯一推荐使用 init(size:)
的情况是当您需要创建一个无法通过 sprite kit builder 实现的动态场景时,并且当您已经有了静态大小的 window成立。
如果您在Xcode中创建一个新的游戏模板项目,默认GameViewController
将使用以下初始化程序来实例化游戏场景:
let scene = SKScene(fileNamed: "GameScene")
初始化器在模板文件中的使用表明这是 Apple 推荐的创建 SKScene
的方法。但是,我在 Stack Overflow 上看到许多使用 init(size:)
初始化程序或简单地使用 SKScene()
.
我想知道创建 SKScene
实例的最佳方法是什么,每种方法的 advantages/disadvantages 是什么,以及使用一种方法与使用一种方法时需要注意的各种陷阱另一个。
我问的原因是我使用 init(fileNamed:)
创建我的游戏场景并构建级别 1。当我后来尝试使用 init(size:)
创建级别 2 的场景的另一个实例时,我运行 成问题。也就是说,如果我使用 init(size:)
而不是 init(fileNamed:)
.
UIScreen
和场景框架的一些位置计算似乎会产生不同的结果
在更一般的意义上,我想听听非常熟悉使用 iOS 和 SpriteKit 的人关于他们初始化新 SKScene
的首选方式的意见以及优点 &使用不同方法的缺点。
我强烈建议在创建游戏场景时不要使用 init(size:)
。您确实应该尝试将设计与结构分开。这允许您更改游戏的布局方式,而无需更改任何代码,从而减少出现错误的可能性。
话虽如此,有一个非常常见的练习教程使用,看起来像这样 init(size:view.size)
。这给游戏设计者带来了各种各样的麻烦,并破坏了 SpriteKit 提供的对多种设备的简单处理。人们倾向于在 0..1 坐标系中结束,在定位节点时到处放置分界线,这也会导致错误,因为人们可能最终会忘记某处的分界线,或者当他们意味着高度时使用宽度。
SKScenes 有 4 种缩放模式来处理场景在每个设备上的外观,在使用此工具开发游戏时应始终考虑到这一点。它真的应该是第一个被讨论的东西,这样人们才能理解它背后的力量。
我唯一推荐使用 init(size:)
的情况是当您需要创建一个无法通过 sprite kit builder 实现的动态场景时,并且当您已经有了静态大小的 window成立。