2017-11-10 107 views
0

我試圖創建一個球的節點類。球應該有一些物理屬性 - 因爲我創建了一個函數來初始化物理屬性。另外,我希望用戶可以設置通過便捷初始化設置的球半徑(通過circleOfRadius)。因爲這個,我將radius設置爲私有。問題是我可以將radius設置爲private var,但不能執行便利性。 這裏是我的代碼:invoke private var to convenience init(swift)

class BallNode: SKShapeNode { 
    var radius:CGFloat = 0 
    private var _R:CGFloat? 

     override init() { 
     super.init() 
     self.setPhysics() 

    } 

var newBallR:CGFloat{ 
     get { 
      return _R! 
     } 
     set { 
      _R = newValue 
      self.radius = _R! 
      print("bsllRRRR:", self.radius) 

     } 
    } 



    convenience init(radius:CGFloat){ 
     self.init(circleOfRadius: radius) 
     self.radius = radius 
     print("successful init circle radius", self.radius) 
    } 

     func setPhysics() { 
     self.physicsBody = SKPhysicsBody.init(circleOfRadius: self.radius) 
     print("physics body is SET with value:", self.radius) 
     self.physicsBody?.affectedByGravity = true 
     print("gravity = T") 
     self.physicsBody?.restitution = 0.2 
     print("res = 0.2") 
    } 

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

} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for touch: AnyObject in touches { 
     let positionOfTouch = touch.location(in: self) 


     let ball = BallNode(radius:65) 
     } 

我知道我可以解決,通過取消私人半徑var和申報便利的init裏面的物理身體屬性,但林不知道,如果它的正確。 還有一件事,當我檢查代碼_R!獲得65值,但正如我所說的便利init不執行。 有人可以幫助我嗎?

回答

0

我認爲它是因爲你沒有調用便利初始化。使用BallNode(radius:65.0),然後它被調用,並且myRadius將被設置爲65.0,但是什麼使用,你沒有在你方便的init中調用setPhysics()

+0

不工作,其實我這裏的代碼是不正確的。它應該如你所說。我會修好它。 – omerc