2017-02-21 75 views
0

我已經設置了SKSpriteNode作爲進度/健康狀態欄。 寬度設置爲一個變量。 這個變量隨着定時器的減少而減少,但節點的寬度並沒有減少? 如果我設置變量增加,那麼節點寬度增加沒有問題,但是如果我設置變量減少不起作用。 我擔心我在這裏犯了一個簡單的錯誤。 這裏是工作的代碼,但如果我改變+不起作用=來= -SKSpriteNode寬度隨着變量增加而不會減少?

class GameScene: SKScene, SKPhysicsContactDelegate { 

var health = SKSpriteNode() 
var healthTimer = Timer() 
var progressValue = 350 


func startHealthTimer() { 

    progressValue += 20 

} 


override func didMove(to view: SKView) { 

    healthTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.startHealthTimer), userInfo: nil, repeats: true) 

} 


override func update(_ currentTime: TimeInterval) { 

    let healthTexture = SKTexture(imageNamed: "health.png") 
    health = SKSpriteNode(color: .white, size: CGSize(width: progressValue, height: 30)) 
    health.position = CGPoint(x: -self.frame.width/2 + healthTexture.size().width/2, y: self.frame.height/2) 
    health.zPosition = 2 
    self.addChild(health) 

} 

回答

2

要添加新的精靈不刪除舊的每次更新。過了一段時間,你會有許多精靈在彼此之上。新的精靈將會縮短,但舊的精靈仍然在展示,所以酒吧似乎並沒有縮短。

class GameScene: SKScene, SKPhysicsContactDelegate { 

    var health: SKSpriteNode? 
    var healthTimer = Timer() 
    var progressValue = 350 

    func startHealthTimer() { 
     progressValue += 20 
    } 

    override func didMove(to view: SKView) { 
     healthTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.startHealthTimer), userInfo: nil, repeats: true) 
    } 

    override func update(_ currentTime: TimeInterval) { 
     if let health = self.health { 
      health.removeFromParent() 
     } 

     let healthTexture = SKTexture(imageNamed: "health.png") 
     self.health = SKSpriteNode(color: .white, size: CGSize(width: progressValue, height: 30)) 
     self.health.position = CGPoint(x: -self.frame.width/2 + healthTexture.size().width/2, y: self.frame.height/2) 
     self.health.zPosition = 2 
     self.addChild(self.health) 
    } 
} 
+0

我明白了。我將如何刪除每個精靈的新位置? –

+1

調用舊的'removeFromParent'。 –

+0

偉大的工作!有沒有辦法讓寬度從右邊緣減少,而不是等於離開節點的任何邊緣? –