2017-02-21 4 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

Отлично, что делает работу! Есть ли способ уменьшить ширину полосы с правого края, а не на равном расстоянии от края узла? –

Смежные вопросы