我刚才问过this similar question,但从那时起,似乎SKNode
现在有了这个漂亮的初始化程序init?(fileNamed filename: String)
,它从.sks文件中取消归档场景。问题是,这个初始值设定项在SKNode
上,而不是SKScene
,因此我尝试(主要是程序员的好奇心)在节点上使用它,任何节点都不是SKScene
或其子类。
现在我知道我可以将我想要的节点作为.sks文件的子节点,使用SKNode(fileNamed:...
加载场景,然后使用childNode(withName:...
拉出节点。但是,由于为fileNamed
声明了SKNode
初始化程序,您应该能够直接加载SKNode
并删除SKScene
中间人。如果这是不可能的,那么为什么不在SKScene
中声明初始值设定项?
所以,我试过这个,但似乎强烈建议.sks文件的根节点是SKScene
的后代,如此对话框中所示:
忽略警告,我制作了一个类似于这样的.sks文件:
我使根场景成为SKNode
子类的自定义类,我得到了这个构建错误:
[MyProject.SolarSystemNode setBlendMode:]: unrecognized selector sent to instance
这是因为在blendMode
上声明了SKEffectNode
属性。类继承是SKNode
- > SKEffectNode
- > SKScene
。显然,fileNamed:
初始值设定项虽然在SKNode
上声明,但会调用SKEffectNode
上的属性。
那么,是否可以直接加载SKNode
,或者我是不是按照这样安排我的节点树:
首先加载场景然后拔出solarSystemNode?如果可以使用SKNode
初始化程序直接从.sks文件加载fileNamed
,那么有人可以向我展示一个示例,最好是在Swift 3中吗?如果无法实现,有人可以告诉我为什么fileNamed
初始值设定项会在SKNode
而不是SKScene
上宣布?