SKSpriteNode subclassing swift

让人想犯罪 __ 提交于 2019-12-06 04:13:28

问题


I have found a few posts on this but I'm still confused on how to do this. I know I have to use the "designated initializer" which is the init(texture: SKTexture!, color: UIColor!, size: CGSize). Really I won't use that anyway. I'd like to just add some properties to the sprite nodes.

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

in the main code I try to add a piece by using

var newPiece : Piece = Piece(imageNamed: "image.png", currentPiece: .type1)
self.addChild(newPiece)

It seems like I'm close, but I'm a bit confused on how to do the initializers.


回答1:


Just change your convenience initializer to this:

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
}

In Swift, a convenience initializer must:

  • Call another convenience initializer of the same class or the designated initializer of the class (not the superclass)
  • Use self only after calling self.init[...]

See the Swift Documentation on initializer for help: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Initialization.html#//apple_ref/doc/uid/TP40014097-CH18-XID_323

Hope this helps,



来源:https://stackoverflow.com/questions/25009021/skspritenode-subclassing-swift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!