整洁、干净地访问 SKNode
Tidy, Clean Access To SKNodes
我正在整理我的一些 SKScene 代码。目前我有大约 11 个对 SKNode 的引用(有些是包含子节点的层)。 class 经常访问这些节点及其子节点。我考虑这样做的方式是:
Subclass 所有 SKNodes 到另一个 class,例如,目前我在 SKScene 的顶部定义了 layerPause: SKNode?
。这将变为 layerPause: PauseMenu
其中:
class PauseMenu: SKNode
{
lazy var lbBestTime: SKLabelNode = childNodeWithName("lbPersonalBest") as! SKLabelNode
}
然后,当场景正在加载时,我可以简单地使用:
layerPause = pauseScene.childNodeWithName("pauseMenu")?.copy() as? SKNode
这将使我能够轻松访问重要的子节点,而无需一直调用 childNodeWithName
。但不幸的是,PauseMenu class 给出了一个错误,说我不能使用 childNodeWithName
方法。
有人能指出我正确的方向吗?也许有一种更优雅的方式来管理我的节点,或者我在 PauseMenu subclass 中遗漏了一些简单的东西,如上所述。
非常感谢,
如此接近,您只需添加一个明确的 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
属性 但是,编译器只知道 layerPause
是一个 SKNode
。请务必告诉它 layerPause
是一个 PauseMenu
,然后您可以使用该 class.
中的自定义属性
我正在整理我的一些 SKScene 代码。目前我有大约 11 个对 SKNode 的引用(有些是包含子节点的层)。 class 经常访问这些节点及其子节点。我考虑这样做的方式是:
Subclass 所有 SKNodes 到另一个 class,例如,目前我在 SKScene 的顶部定义了 layerPause: SKNode?
。这将变为 layerPause: PauseMenu
其中:
class PauseMenu: SKNode
{
lazy var lbBestTime: SKLabelNode = childNodeWithName("lbPersonalBest") as! SKLabelNode
}
然后,当场景正在加载时,我可以简单地使用:
layerPause = pauseScene.childNodeWithName("pauseMenu")?.copy() as? SKNode
这将使我能够轻松访问重要的子节点,而无需一直调用 childNodeWithName
。但不幸的是,PauseMenu class 给出了一个错误,说我不能使用 childNodeWithName
方法。
有人能指出我正确的方向吗?也许有一种更优雅的方式来管理我的节点,或者我在 PauseMenu subclass 中遗漏了一些简单的东西,如上所述。
非常感谢,
如此接近,您只需添加一个明确的 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
属性 但是,编译器只知道 layerPause
是一个 SKNode
。请务必告诉它 layerPause
是一个 PauseMenu
,然后您可以使用该 class.