SKSpriteNode子类化swift

Che*_*ees 4 initialization ios sprite-kit skspritenode swift

我已经找到了一些帖子,但我仍然对如何做到这一点感到困惑.我知道我必须使用"指定的初始化程序",它是init(纹理:SKTexture!,颜色:UIColor!,大小:CGSize).真的,我还是不会用它.我想向sprite节点添加一些属性.

class Piece: SKSpriteNode {

enum Type: Int {
    case type1 = 1, type2, type3, type4, type5
}

    var piecetype : Type 

init(texture: SKTexture!, color: UIColor!, size: CGSize)
{
    self.piecetype = .type1
    super.init(texture: texture, color: color, size: size)

}


convenience init(imageNamed: String!, currentPiece: Type)
    {
        self.piecetype = currentPiece
        let color = UIColor()
        let texture = SKTexture(imageNamed: imageNamed)
        let size = CGSizeMake(100.0, 100.0)
        super.init(texture: texture, color: color, size: size)
    }
Run Code Online (Sandbox Code Playgroud)

在主要代码中我尝试使用添加一块

var newPiece : Piece = Piece(imageNamed: "image.png", currentPiece: .type1)
self.addChild(newPiece)
Run Code Online (Sandbox Code Playgroud)

好像我很接近,但我对如何做初始化器有点困惑.

Zed*_*nem 8

只需将你convenience initializer改为:

convenience init(imageNamed: String!, currentPiece: Type) {
    let color = UIColor()
    let texture = SKTexture(imageNamed: imageNamed)
    let size = CGSizeMake(100.0, 100.0)
    self.init(texture: texture, color: color, size: size)
    self.piecetype = currentPiece
}
Run Code Online (Sandbox Code Playgroud)

在斯威夫特,convenience initializer必须:

  • 调用同一类的另一个便利初始值设定项或类的指定初始值设定项(不是超类)
  • 呼叫后仅使用自己 self.init[...]

有关帮助,请参阅有关初始化程序的Swift文档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-XID_323

希望这可以帮助,