2015-01-29 47 views
10

Próbuję utworzyć podklasę SKShapeNode w szybkim jak SKShapeNode (circleOfRadius: radius), ale nie ma wyznaczonego dla niego init.brak wyznaczonego init dla SKShapeNode (circleOfRadius: radius)

Ktoś ma jakieś obejścia lub informacje o tym, dlaczego? Nie jestem pewien, czy to błąd, czy cel. Znalazłem to wideo demonstrujące obejście dla SKSpriteNode, ale nie działa dla mnie. https://skillsmatter.com/skillscasts/5695-how-to-subclass-a-skspritenode

Ogólnie próbuję utworzyć podklasę dla SKShapeNode, którą mogę następnie ponownie utworzyć podklasę, aby mieć różne wersje łatwiejszego zarządzania moim kodem. TIA

Dzięki Martinowi znalazłem ten przykład wcześniej. Działa, ale jak mógłbym zrobić to w kręgu zamiast prostokąta?

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") 
     } 
    } 

w kodzie głównym

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

Czy to pomoże: [Utworzenie podklasy SKShapeNode z Swift] (http://stackoverflow.com/questions/24235185/subclassing-skshapenode-with-swift)? –

+1

Jeśli kompilator zareaguje na brakujący init, zwykle sugeruje wstawienie jednego (czerwona kropka z kwadratem). Po prostu niech to zrobi. –

+0

Martin. Pracowałem wcześniej z tym przykładem i działałem teraz, ale w jaki sposób utworzyć koło zamiast prostokąta? – Chris

Odpowiedz

13

jak to jest?

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

To działa! Dziękuję Ci bardzo! – Chris

+2

Czy to należy zrobić dla podklasy SKShapeNode (circleOfRadius: ....)? zestaw sprite naprawdę nie ma wbudowanego inicjatora do tego? – Confused

0

To zadziałało dla nas.

To pozwala na korzystanie z innych inicjatorów wygodę z SKShapeNode, ale to dziwne składnia wyjaśnione tutaj: 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") 
    } 
}