Subclassing SKShapeNode with Swift

2020-08-09 17:26发布

问题:

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'

回答1:

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