SKSpriteNode宽度随着变量增加而不会减少?
问题描述:
我已经设置了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)
}
答
要添加新的精灵不删除旧的每次更新。过了一段时间,你会有许多精灵在彼此之上。新的精灵将会缩短,但旧的精灵仍然在展示,所以酒吧似乎并没有缩短。
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)
}
}
我明白了。我将如何删除每个精灵的新位置? –
调用旧的'removeFromParent'。 –
伟大的工作!有没有办法让宽度从右边缘减少,而不是等于离开节点的任何边缘? –