2015-01-29 10 views
10

SKShapeNode (circleOfRadius : radius)와 같이 swShapeNode의 하위 클래스를 만들려고하는데 지정된 init가 없습니다.SKShapeNode (circleOfRadius : radius)에 지정된 init이 없습니다.

이유에 대한 해결 방법이나 정보가있는 사람이 누구입니까? 이것이 버그인지 고의인지 확실하지 않습니다. 이 비디오는 SKSpriteNode에 대한 해결 방법을 보여 주지만 나를 위해 작동하지 않습니다. https://skillsmatter.com/skillscasts/5695-how-to-subclass-a-skspritenode

전반적으로 나는 하위 클래스를 만들어서 다른 코드를 쉽게 관리 할 수있는 SKShapeNode를 만들려고합니다. TIA

고마워 마틴 나는 그 예를 더 일찍 발견했다. 그것은 작동하지만 어떻게 사각형 대신 원으로 만들 것인가? 메인 코드에서

import Foundation 
import SpriteKit 


    class Player : SKShapeNode { 

     override init() { 
      super.init() 
      self.name = "Player" 
      self.fillColor = UIColor.blackColor() 

     } 

     init(rectOfSize: CGSize) { 
      super.init() 

      var rect = CGRect(origin: CGPointZero, size: rectOfSize) 
      self.path = CGPathCreateWithRect(rect, nil) 
     } 

     required init?(coder aDecoder: NSCoder) { 
      fatalError("init(coder:) has not been implemented") 
     } 
    } 

는이 방법

let playerOne = Player(rectOfSize: CGSize(width: 100, height: 100)) 
+0

이 도움이 되나요 : [스위프트와 서브 클래스 SKShapeNode을 (http://stackoverflow.com/questions/24235185/subclassing-skshapenode-with-swift)? –

+1

컴파일러가 누락 된 init에 대해 울부 짖는다면 대개 하나를 삽입하는 것이 좋습니다 (사각형과 함께 빨간 점). 그냥 그렇게하게하십시오. –

+0

Martin. 나는 그 예제를 더 일찍 작업했고 지금은 작동하게 만들었지 만 사각형 대신 원을 만들 수 있을까요? – Chris

답변

13

?

class Player: SKShapeNode { 

    init(circleOfRadius: CGFloat){ 
     super.init() 

     let diameter = circleOfRadius * 2 
     self.path = CGPathCreateWithEllipseInRect(CGRect(origin: CGPointZero, size: CGSize(width: diameter, height: diameter)), nil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 
+0

그게 효과가 있습니다! 고마워요! – Chris

+2

SKShapeNode (circleOfRadius : ....)를 서브 클래 싱하려면 어떻게해야합니까? 스프라이트 키트에는 실제로 이니셜 라이저가 내장되어 있지 않습니다. – Confused

0

이것은 우리를 위해 일했습니다.

그것은 당신이 SKShapeNode에서 다른 편의 이니셜 라이저를 사용할 수 있습니다, 그러나 그것은 이상한 구문은 여기에서 설명하고있다 : https://stackoverflow.com/a/24536826/144088

class CircleNode : SKShapeNode { 

    override init() { 
     super.init() 
    } 

    convenience init(width: CGFloat, point: CGPoint) { 
     self.init() 
     self.init(circleOfRadius: width/2) 
     // Do stuff 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
}