#swift #sprite-kit #delay
#swift #sprite-kit #задержка
Вопрос:
Я создаю игру, в которой игрок использует бонусы. Всякий раз, когда игрок выбирает активировать включение питания, эта функция запускается. Это изменяет изображение игрока на изображение игрока, использующего усиление, и изменяет физику столкновений, так что игрок теперь неуязвим для врагов.
Это происходит всякий раз, когда переменная powerActivated равна 1, однако, как вы можете видеть, она сразу возвращается к 0. Мне нужно, чтобы она задерживалась на 5-10 секунд, а затем переходила в 0. Это позволит пользователю использовать включение питания в течение нескольких секунд, прежде чем оно исчезнет.
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:
Используйте 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")
}