2015-01-29 15 views
10

Tôi đang cố tạo một lớp con của SKShapeNode nhanh như SKShapeNode (circleOfRadius: radius) nhưng không có init được chỉ định cho nó.không có init được chỉ định cho SKShapeNode (circleOfRadius: radius)

Bất kỳ ai có bất kỳ cách giải quyết hoặc thông tin nào về lý do tại sao? Tôi không chắc đây có phải là lỗi hay cố ý hay không. Tôi thấy video này minh họa một giải pháp cho SKSpriteNode nhưng nó không hoạt động đối với tôi. https://skillsmatter.com/skillscasts/5695-how-to-subclass-a-skspritenode

Nói chung tôi đang cố gắng tạo một lớp con cho SKShapeNode mà sau đó tôi có thể phân lớp lại để có các phiên bản khác nhau để quản lý mã của tôi dễ dàng hơn. TIA

Cảm ơn Martin tôi đã tìm thấy ví dụ đó trước đó. Nó hoạt động nhưng làm thế nào tôi sẽ làm cho rằng vào một vòng tròn thay vì một hình chữ nhật?

import Foundation 
import SpriteKit 


    class Player : SKShapeNode { 

     override init() { 
      super.init() 
      self.name = "Player" 
      self.fillColor = UIColor.blackColor() 

     } 

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

      var rect = CGRect(origin: CGPointZero, size: rectOfSize) 
      self.path = CGPathCreateWithRect(rect, nil) 
     } 

     required init?(coder aDecoder: NSCoder) { 
      fatalError("init(coder:) has not been implemented") 
     } 
    } 

Trong Mã Main

let playerOne = Player(rectOfSize: CGSize(width: 100, height: 100)) 
+0

Liệu sự giúp đỡ này: [subclassing SKShapeNode với Swift] (http://stackoverflow.com/questions/24235185/subclassing-skshapenode-with-swift)? –

+1

Nếu trình biên dịch xoay quanh một init bị thiếu, nó thường gợi ý chèn một (dấu chấm đỏ có hình vuông). Chỉ cần để cho nó làm điều đó. –

+0

Martin. Tôi đã làm việc với ví dụ đó trước đó và đã làm việc ngay bây giờ nhưng làm thế nào tôi sẽ làm cho một vòng tròn thay vì một hình chữ nhật? – Chris

Trả lời

13

thế nào đây?

class Player: SKShapeNode { 

    init(circleOfRadius: CGFloat){ 
     super.init() 

     let diameter = circleOfRadius * 2 
     self.path = CGPathCreateWithEllipseInRect(CGRect(origin: CGPointZero, size: CGSize(width: diameter, height: diameter)), nil) 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 
+0

Điều đó hoạt động! Cảm ơn nhiều! – Chris

+2

Đây có phải là cách nó phải được thực hiện để phân lớp SKShapeNode (circleOfRadius: ....)? sprite kit thực sự không có một xây dựng trong initialiser cho điều này? – Confused

0

Điều này phù hợp với chúng tôi.

Nó cho phép bạn sử dụng initializers tiện khác từ SKShapeNode, nhưng nó đã cú pháp lạ giải thích ở đây: https://stackoverflow.com/a/24536826/144088

class CircleNode : SKShapeNode { 

    override init() { 
     super.init() 
    } 

    convenience init(width: CGFloat, point: CGPoint) { 
     self.init() 
     self.init(circleOfRadius: width/2) 
     // Do stuff 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
} 
Các vấn đề liên quan