如何将.sks文件添加到现有的Swift / Sprite-Kit项目?
我开始关注Ray Wenderlich的“太空入侵者”教程,但是分歧很大。 我现在有3个SKScenes – 我的标题屏幕,我的主要游戏屏幕和我的结束水平/游戏在屏幕上。 我添加的标题屏幕和结束游戏场景,这些都有.sks文件; 主游戏屏幕不会显示所有元素(SKSpriteNodes等)。 我的程序stream程如下:
我现在真的想通过场景编辑器放置主游戏屏幕的一些事件,所以我为它创build了一个.sks文件,并试图改变我的titleScene.swift,如下所示:
从:
let gameScene = GameScene(size:CGSize(width: 1536, height: 2048))
至:
let gameScene = SKScene(fileNamed: "GameScene.sks") as! GameScene!
但是,这会给出:
我试图删除required init(coder aDecoder: NSCoder)
但Xcode然后抱怨说
所需的init(编码器:必须由SKScene的子类提供
然而我的titleScene
和gameOverScene
也是gameOverScene
的子类,他们没有init(coder 🙂
我真的不能看到我在做什么显示我的titleScreen和我的gameOverScene通过(fileNames :)和他们的.sks文件,并尝试做我的gameScene相同的区别。
你得到所需的原因是因为你有variables是不可选的或在init发生之前未初始化。
如果你需要在init函数中分配variables,那么你可以这样做:
required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }
但是,那么你会问我:Knight0fDragon先生,它告诉我要用coder
replacefileNamed
,并且在我切换时不编译。
那么这是因为init(fileNamed:)
是一个方便的init,而不是一个指定的init。 为了能够inheritance一个类并获得它所有的便利,你需要覆盖它所有的指定inits。
现在用SKScene,你有3,而你已经知道了1。
我们重写另一个2:
override init() { super.init() } override init(size: CGSize) { super.init(size: size) }
好吧,现在这个小狗应该准备好编译了,我们只需要获得分配的variables。
那么我喜欢做的是创build一个设置方法的任何variables必须分配在任何版本的初始化超级被调用后。
不幸的是,我们不能在super调用之前为常量做这些事情,所以我们需要在每个方法中设置它们。 原因是self
还没有完全存在。
这最终会看起来像这样:
let constant : String required init?(coder aDecoder: NSCoder) { constant = "hi" super.init(coder: aDecoder) setup() } override init() { constant = "hi" super.init() setup() } override init(size: CGSize) { constant = "hi" super.init(size: size) setup() }