如何在任何不是SKScene的节点上使用SKNode fileNamed:initializer

时间:2017-03-16 01:35:57

标签: sprite-kit skscene sknode

我刚才问过this similar question,但从那时起,似乎SKNode现在有了这个漂亮的初始化程序init?(fileNamed filename: String),它从.sks文件中取消归档场景。问题是,这个初始值设定项在SKNode上,而不是SKScene,因此我尝试(主要是程序员的好奇心)在节点上使用它,任何节点都不是SKScene或其子类。

现在我知道我可以将我想要的节点作为.sks文件的子节点,使用SKNode(fileNamed:...加载场景,然后使用childNode(withName:...拉出节点。但是,由于为fileNamed声明了SKNode初始化程序,您应该能够直接加载SKNode并删除SKScene中间人。如果这是不可能的,那么为什么不在SKScene中声明初始值设定项?

所以,我试过这个,但似乎强烈建议.sks文件的根节点是SKScene的后代,如此对话框中所示:

enter image description here

忽略警告,我制作了一个类似于这样的.sks文件:

enter image description here

我使根场景成为SKNode子类的自定义类,我得到了这个构建错误:

[MyProject.SolarSystemNode setBlendMode:]: unrecognized selector sent to instance

这是因为在blendMode上声明了SKEffectNode属性。类继承是SKNode - > SKEffectNode - > SKScene。显然,fileNamed:初始值设定项虽然在SKNode上声明,但会调用SKEffectNode上的属性。

那么,是否可以直接加载SKNode,或者我是不是按照这样安排我的节点树:

enter image description here

首先加载场景然后拔出solarSystemNode?如果可以使用SKNode初始化程序直接从.sks文件加载fileNamed,那么有人可以向我展示一个示例,最好是在Swift 3中吗?如果无法实现,有人可以告诉我为什么fileNamed初始值设定项会在SKNode而不是SKScene上宣布?

0 个答案:

没有答案