Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Subclassing SKShapeNode with Swift

I'm trying to subclass SKShapeNode with Swift. So far I've got something like this:

import UIKit
import SpriteKit

class STGridNode: SKShapeNode {

    init() {
        super.init()
        self.name = "STGridNode"
        self.fillColor = UIColor(red: 0.11, green: 0.82, blue: 0.69, alpha: 1)
    }

}

In my code I want so do something along the lines of:

let s = STGridNode(rectOfSize: CGSize(width: 100, height: 100))

So my question is - how do I implement rectOfSize in the initialiser for STGridNode? I've tried:

init(rectOfSize: CGPoint) {
    super.init(rectOfSize: rectOfSize);
}

But that gives an error: 'Could not find an overload for init that accepts the supplied arguments'

like image 885
samturner Avatar asked Jun 16 '14 00:06

samturner


1 Answers

You have two problems with the code you tried:

  1. rectOfSize in SKShapeNode takes a CGSize not a CGPoint
  2. rectOfSize in SKShapeNode is a convenience initializer so you won't be able to call it from a subclass. You will have to call super.init() and implement the rect functionality yourself

You can do something like this:

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

    var rect = CGRect(origin: CGPointZero, size: rectOfSize)
    self.path = CGPathCreateWithRect(rect, nil)
}
like image 134
drewag Avatar answered Nov 16 '22 02:11

drewag