El temporizador no se está actualizando.
Básicamente estoy ejecutando un temporizador en la función didMove de la clase GameScene en SpriteKit. La función simplemente hace que el jugador dispare balas a intervalos de 0,5 segundos. Sin embargo, el problema que estoy teniendo es que una vez que el jugador muere y utilizo removeFromParent()
en el jugador, las balas siguen disparándose como si aparecieran en un espacio vacío.
Aquí está mi código:
var timer1 = Timer()
self.timer1 = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true, block: { _ in self.bullet1.fireBullet1(player: self.player1, scene: self)})
Y aquí está la función fireBullet1
:
func fireBullet1(player: Player1, scene: SKScene) {
let bulletNode = Bullet()
bulletNode.texture = self.textureAtlas.textureNamed("bullet1")
bulletNode.position = player.position
bulletNode.position.y += -sin(player.zRotation) * 10
bulletNode.position.x += -cos(player.zRotation) * 10
bulletNode.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width / 500)
bulletNode.physicsBody?.mass = 0.005
bulletNode.physicsBody?.affectedByGravity = false
bulletNode.zRotation = player.zRotation
bulletNode.physicsBody?.categoryBitMask = PhysicsCategory.bullet1.rawValue
bulletNode.physicsBody?.contactTestBitMask = PhysicsCategory.boundary.rawValue | PhysicsCategory.bullet2.rawValue | PhysicsCategory.player2.rawValue
scene.addChild(bulletNode)
bulletNode.physicsBody?.applyImpulse(CGVector(dx: -cos(player.zRotation) * 1, dy: -sin(player.zRotation) * 1))
}
¿Alguien puede decirme qué necesito hacer para que el temporizador deje de llamar a la función después de que el jugador muera?
davy.ai
Una solución al problema es invalidar el temporizador cuando el jugador muere llamando
timer1.invalidate()
en el código que elimina al jugador de la escena. Por ejemplo:Esto detendrá que el temporizador llame a la función
fireBullet1
y evitará que las balas se disparen después de que el jugador haya sido eliminado de la escena.