Cocoa touch 用Swift子类化SKShapeNode

Cocoa touch 用Swift子类化SKShapeNode,cocoa-touch,sprite-kit,swift,Cocoa Touch,Sprite Kit,Swift,我正试图用Swift将SKShapeNode子类化。到目前为止,我得到了类似的结果: 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:

我正试图用Swift将
SKShapeNode
子类化。到目前为止,我得到了类似的结果:

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

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

    var rect = CGRect(origin: CGPointZero, size: rectOfSize)
    self.path = CGPathCreateWithRect(rect, nil)
}
在我的代码中,我希望这样做:

let s = STGridNode(rectOfSize: CGSize(width: 100, height: 100))
所以我的问题是-如何在
STGridNode
的初始化器中实现
rectOfSize
?我试过:

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

但这会产生一个错误:“找不到接受所提供参数的init重载”

您尝试的代码有两个问题:

  • SKShapeNode中的
    rectOfSize
    采用
    CGSize
    而不是
    CGPoint
  • SKShapeNode
    中的
    rectOfSize
    是一个方便的初始值设定项,因此您无法从子类调用它。您必须调用
    super.init()
    并自己实现rect功能
  • 您可以这样做:

    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)
        }
    
    }
    
    init(rectOfSize: CGSize) {
        super.init()
    
        var rect = CGRect(origin: CGPointZero, size: rectOfSize)
        self.path = CGPathCreateWithRect(rect, nil)
    }
    

    当你尝试初始化方法时,你会遇到什么错误?@drewag,我已经更新了我的问题的更多细节。谢谢:)self.path=CGPath(rect:rect,transform:nil)