Как создать задержку перед изменением переменной в SpriteKit - PullRequest
0 голосов
/ 14 апреля 2019

Я создаю игру, в которой игрок использует бонусы.Всякий раз, когда игрок выбирает включение питания, эта функция запускается.Он изменяет образ игрока на изображение игрока, использующего powerup, и изменяет физику столкновений, так что игрок теперь неуязвим для врагов.

Он делает это всякий раз, когда переменная powerActivation равна 1, однако какВы можете видеть, что он возвращается к 0. Мне нужно отложить на 5-10 секунд, а затем перейти к 0. Это позволит пользователю использовать powerup в течение нескольких секунд, прежде чем он исчезнет.

 func superAbility(){

        powerActivated = 1

        if powerActivated == 1 {

        player.texture = SKTexture(imageNamed: "heroWithPower")
        player.physicsBody!.categoryBitMask = PhysicsCategories.PowerUp
        player.physicsBody!.collisionBitMask = PhysicsCategories.None
        player.physicsBody!.contactTestBitMask = PhysicsCategories.Enemy

        // delay should be here

        powerActivated = 0

        }

        else {
            player.texture = SKTexture(imageNamed: "hero")
            player.physicsBody!.categoryBitMask = PhysicsCategories.Player
            player.physicsBody!.collisionBitMask = PhysicsCategories.None
            player.physicsBody!.contactTestBitMask = PhysicsCategories.Enemy

        }

1 Ответ

2 голосов
/ 15 апреля 2019

Используйте SKAction для создания задержки, так что вы ждете во время игры, а не в реальном времени, поэтому любые внешние действия телефона, такие как телефонный звонок, не повредят вашей игре.

func superAbility(){

        player.texture = SKTexture(imageNamed: "heroWithPower")
        player.physicsBody!.categoryBitMask = PhysicsCategories.PowerUp
        player.physicsBody!.collisionBitMask = PhysicsCategories.None
        player.physicsBody!.contactTestBitMask = PhysicsCategories.None //I think you meant to set this to none to be immune to enemies

        let deactivateAction = SKAction.run{
            [unowned self] in
            self.player.texture = SKTexture(imageNamed: "hero")
            self.player.physicsBody!.categoryBitMask = PhysicsCategories.Player
            self.player.physicsBody!.collisionBitMask = PhysicsCategories.None
            self.player.physicsBody!.contactTestBitMask = PhysicsCategories.Enemy
        }
        let wait = SKAction.wait(forDuration:5)
        let seq = SKAction.sequence([wait,deactivateAction])
        player.run(seq, withKey:"powerup")
}
...