2015-07-20 114 views
0

我想整理一些我的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子類中丟失了一些簡單的東西,如上所述。

非常感謝,

回答

1

這麼近,你只需要添加一個明確的self

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

唯一缺少這裏是self

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

在的情況下(懶惰)財產初始值設定項,你不能離開self隱式......可能該初始化器被視爲閉包(即使它不需要大括號,如果它是一個聲明),關閉總是需要清楚的是他們是否捕獲了self

如果你初始化layerPause在你的問題,它的類型是SKNode,你仍然無法使用新定義的lbBestTime屬性就可以了,雖然 - 所有的編譯器知道是layerPauseSKNode 。一定要告訴它layerPausePauseMenu,然後您可以使用該類的自定義屬性。

+0

事實上,我認爲懶惰的初始化可能會允許這些屬性,但可悲的是它沒有。相反,我在該類中添加了一個圖層變量,刪除了該子類,並通過初始化程序將該節點傳遞給該類。它不覺得非常優雅,但它是以前的改進 – Mason