2014-09-10 4 views
1

나는 Swift를 사용하여 SpriteKit 게임을하고 있으며 SKSpriteNode를 서브 클래스 화해야합니다. 에서 바로 이후에 발생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 예외 : 초기화() (오버라이드 (override)는하지 않은) 함수에서 나는 서브 클래스의 속성은 다음 슈퍼 전화 초기화 서브 클래스의 init의 시작 여기에 오류가 : 당신이 SKSpriteNode에서 상속하는 경우

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

+0

어제 출시 된 Xcode (GM)의 최신 버전을 사용합니까? –

+0

@GuidoHendriks 예, 정말로 그렇습니다. –

+1

레이블이있는 노드를 가져 오는 것이 맞습니까? 이미지 나 텍스처도 있습니까? –

답변

2

, 당신은 지정 초기화를 호출해야합니다. 이 경우 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로 바꿨습니다. 나는 대답을 직접 게시하려고했다. 도와 줘서 고마워! –