es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    player1.removeFromParent()
    self.timer1.invalidate()
    

    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.

Comments are closed.