2017-03-20 5 views
1

このinitはSKShapeNodeのための設計されたinitではありません。私はそれについて調べましたが、この邪魔な円を作成する正しい方法を見つけることができませんでした。継承SKShapeNode

答えて

2

SKShapeNode.init(circleOfRadius:)SKShapeNodeの便利な初期化ツールなので、Swift初期化子から呼び出すことはできません。 Swiftは、Objective Cよりも厳密に指定イニシャライザパターンを強制します。残念ながら

は、SKShapeNodeのための指定イニシャライザはちょうどinitで表示されますので、あなたはこのような何かをする必要があります:

上記のコードは、アップルが提供するAPI与えられた SKShapeNodeをサブクラス化するために動作しますが、
public class Player: SKShapeNode { 
    public var playerName : String 
    private var inventory: [enumObject] 

    init(nameOfPlayer:String, position:CGPoint, radius: CGFloat) { 
     playerName = nameOfPlayer 
     inventory = [enumObject]() 

     super.init() 

     self.path = CGPath(ellipseIn: CGRect(origin: .zero, size: CGSize(width: radius, height: radius)), transform: nil) 

     self.position = position 
     self.fillColor = SKColor.white 
    } 

    // init?(coder:) is the other designated initializer that we have to support 
    public required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 

あなたのコードを将来どのように変更する必要があるかを考慮して、SKShapeNodeを含むSKNodeサブクラスを作成する方が意味があります。この設定では、プレーヤを単なるサークル以上のものとして表現したい場合は、プレーヤノードにノードを追加するだけです。