整洁,清洁访问SKNodes

问题描述:

我想整理一些我的SKScene代码。目前我有约11个参考SKNodes(一些是包含子节点的图层)。这些节点及其子节点经常被该类访问。我认为这样做的方式是:整洁,清洁访问SKNodes

将所有SKNode的子类别转换为另一个类别,例如,当前我在SKOIOS上定义了layerPause: SKNode?。这将成为layerPause: PauseMenu其中:

class PauseMenu: SKNode 
{ 
lazy var lbBestTime: SKLabelNode = childNodeWithName("lbPersonalBest") as! SKLabelNode 
} 

然后,场景加载时,我可以简单地使用:

layerPause = pauseScene.childNodeWithName("pauseMenu")?.copy() as? SKNode 

这将让我轻松地访问重要的子节点,而无需调用childNodeWithName所有的时间。但不幸的是,PauseMenu类给出了一个错误,说我不能使用childNodeWithName方法。

难道有人指着我正确的方向吗?也许有更好的方法来管理我的节点,或者我在PauseMenu子类中丢失了一些简单的东西,如上所述。

非常感谢,

这么近,你只需要添加一个明确的self

class PauseMenu: SKNode 
{ 
    lazy var lbBestTime: SKLabelNode = 
     self.childNodeWithName("lbPersonalBest") as! SKLabelNode 
} 

唯一缺少这里是self

class PauseMenu: SKNode { 
    lazy var lbBestTime: SKLabelNode = self.childNodeWithName("lbPersonalBest") as! SKLabelNode 
} 

在的情况下(懒惰)财产初始值设定项,你不能离开self隐式......可能该初始化器被视为闭包(即使它不需要大括号,如果它是一个声明),关闭总是需要清楚的是他们是否捕获了self

如果你初始化layerPause在你的问题,它的类型是SKNode,你仍然无法使用新定义的lbBestTime属性就可以了,虽然 - 所有的编译器知道是layerPauseSKNode 。一定要告诉它layerPausePauseMenu,然后您可以使用该类的自定义属性。

+0

事实上,我认为懒惰的初始化可能会允许这些属性,但可悲的是它没有。相反,我在该类中添加了一个图层变量,删除了该子类,并通过初始化程序将该节点传递给该类。它不觉得非常优雅,但它是以前的改进 – Mason