no designated init for SKShapeNode(circleOfRadius: radius)

I’m trying to create a subclass of SKShapeNode in swift as SKShapeNode(circleOfRadius: radius) but there is no designated init for it.

Anyone have any workarounds or info about why? I’m not sure if this is a bug or intentional. I found this video demonstrating a workaround for SKSpriteNode but its not working for me. https://skillsmatter.com/skillscasts/5695-how-to-subclass-a-skspritenode

  • Swift: Make translucent overlapping lines of the same color not change color when intersecting
  • In Objective-C why should I check if self = is not nil?
  • Rotating an SKShapeNode along its center
  • How to draw a hollow circle with two different colors?
  • 'Use of self in method call before super.init initializes self', can't init properties through a method call
  • Draw a hole in a rectangle with SpriteKit?
  • Overall i am trying to make a subclass for an SKShapeNode that i can then subclass from again to have different versions of to easier manage my code.
    TIA

    Thanks Martin i found that example earlier. It works but how would i make that into a circle instead of a rectangle?

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

    In Main Code

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

    2 Solutions Collect From Internet About “no designated init for SKShapeNode(circleOfRadius: radius)”

    how’s this?

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

    This worked for us.

    It allows you to use other convenience initializers from SKShapeNode, but it has weird syntax explained here: 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")
        }
    }