2017-12-29 31 views
0

SKYapeNodeのサブクラスを取得して初期化子を受け入れることができません。この問題を回避するために、ここに投稿された例を試してみました。Adding Convenience Initializers in Swift Subclass私が使用しているコードは以下の通りです。スウィフトSKShapeNodeは初期化子を受け付けません

class Ground1 : SKShapeNode { 

override init() { 
    super.init() 
    print("Hello1") 
} 

convenience init(width: CGFloat, point: CGPoint) { 
    var points = [CGPoint(x: -900, y: -300), 
        CGPoint(x: -600, y: -100), 
        CGPoint(x: -100, y: -300), 
        CGPoint(x: 2, y: 150), 
        CGPoint(x: 100, y: -300), 
        CGPoint(x: 600, y: -100), 
        CGPoint(x: 900, y: -300)] 
    self.init(splinePoints: &points, count: points.count) 
    lineWidth = 5 
    strokeColor = UIColor.orange 
    physicsBody = SKPhysicsBody(edgeChainFrom: path!) 
    physicsBody?.restitution = 0.75 
    physicsBody?.isDynamic = false 
    print("Hello2") 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 

}

コンビニエンスINITを(初期化)無視され、使用されません。シーンにシェイプが追加されなくなりました。私は間違って何をしていますか?

+1

地面を追加するためにどのようなコードを使用しましたか? – Sweeper

+0

私はgameSceneのインスタンスを作成して、ground = ground1()とし、インスタンスをシーンに追加します。 Addchild(gound)。私はコンソールでprint hello1を取得しますが、印刷はしません。hello2 – hoboBob

+0

これを 'let ground = Ground1(width:10、point:CGPoint.zero)'と 'addChild(ground)'にしてみてください。 'override init(){...}'と ''必要なinit {...} 'を削除することができます。 – 0x141E

答えて

0

0x141Eのおかげで、誰が正しい方向に私を指摘したのですか。私はこれが働いたが、コードが乱雑に見える。このように初期化を行う理由は、Adding Convenience Initializers in Swift Subclassで詳しく説明されています。 splinePointsを使用してパスに割り当てるために、私は解決策を見つけることができませんでしたが、

class Ground1 : SKShapeNode { 

    override init() { 
     super.init() 
    } 

    convenience init(name: String) { 
     var points = [CGPoint(x: -900, y: -300), 
         CGPoint(x: -600, y: -100), 
         CGPoint(x: -100, y: -300), 
         CGPoint(x: 2, y: 150), 
         CGPoint(x: 100, y: -300), 
         CGPoint(x: 600, y: -100), 
         CGPoint(x: 900, y: -300)] 
     self.init(splinePoints: &points, count: points.count) 
     lineWidth = 5 
     strokeColor = UIColor.orange 
     physicsBody = SKPhysicsBody(edgeChainFrom: self.path!) 
     physicsBody?.restitution = 0.75 
     physicsBody?.isDynamic = false 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 
} 
関連する問題