2014-09-10 68 views
1

我正在使用Swift進行SpriteKit遊戲,我需要繼承SKSpriteNode。在init()(這是不是一個覆蓋)函數初始化我的子類的屬性,然後調用超:Swift中的super.init()遞歸問題

init(selector: Selector, delegateScene: SKScene, text: String, position: CGPoint) { 
    self.delegateScene = delegateScene 

    self.labelNode = SKLabelNode() 
    self.labelNode.position = CGPointZero 
    self.labelNode.text = text 

    self.selector = selector 

    super.init() 
} 

我在super.init(設置斷點)和EXC_BAD_INSTRUCTION異常後馬上出現在子類init的開始。這裏的錯誤:

(file path).swift: 12: 7: fatal error: use of unimplemented initializer 'init(texture:color:size:)' for class 'Energies.Button'

+0

您是否使用昨天發佈的最新版Xcode(GM)? – 2014-09-10 09:43:33

+0

@GuidoHendriks是的,我的確的確如此。 – 2014-09-10 09:44:07

+1

您試圖使用標籤獲取節點是否正確?它是否也有圖像或紋理? – 2014-09-10 10:12:40

回答

2

如果從SKSpriteNode繼承,你應該調用指定的初始化。在這種情況下,需要是init(texture:color:size:)。所以,如果你使用的是圖像或紋理,你就需要調用super.init這樣的:

super.init(texture: texture, color: nil, size: CGSize(width: 100, height: 100)) 

請注意,您還可以在初始化時需要設置大小。

但是在這種情況下,您可以忘記上述內容,因爲您不想查找SKSpriteNode的子類,而是SKNode的子類。如果將聲明中的超類從SKSpriteNode更改爲SKNode,它應該立即生效。

您還需要在super.init()之後添加您的標籤添加到節點,否則您的標籤將不會顯示並且您的節點將爲空。

+0

我其實就是現在,將超類更改爲SKNode並且工作正常。我本人即將發佈答案。感謝您的幫助! – 2014-09-10 10:33:03