2015-01-29 2 views
10

Я пытаюсь создать подкласс SKShapeNode в swift как SKShapeNode (circleOfRadius: radius), но для него нет назначенного init.нет назначенного init для SKShapeNode (circleOfRadius: radius)

У кого-нибудь есть обходные пути или информация о том, почему? Я не уверен, что это ошибка или намеренная. Я нашел это видео, демонстрирующее обходное решение для 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 с Swift] (http://stackoverflow.com/questions/24235185/subclassing-skshapenode-with-swift)? –

+1

Если компилятор кричит о недостающем init, он обычно предлагает вставить один (красная точка с квадратом). Просто пусть это так. –

+0

Мартин. Я работал с этим примером ранее и получил его сейчас, но как бы сделать это круг вместо прямоугольника? – 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") 
    } 
}