由于几个原因,我会远离Timer
这里......如果游戏暂停(例如场景或视图暂停),该解决方案会发生什么?当发生不同的中断时(例如电话,或让应用程序因任何原因进入后台......),计时器是否会继续运行。在这些情况下,这个计时器会自动暂停吗,当应用程序返回前台时它会取消暂停(也自动)吗?
简短的回答是:“远离它并使用 SKAction :)”
长答案是:
计时器不会自动暂停/取消暂停。它不与像SKAction
. 当用户返回游戏时,不会像中断前那样具有重力,重力将具有意想不到的值,这可能会在您的游戏中造成一些混乱。因此,正如我所提到的,您需要一个 Timer 类的自定义暂停功能来处理这些情况。但是,与Timer
类的情况不同,所有这些都是SKActions
自动处理的。
您也可以使用 update 方法,但我更喜欢操作,因此您可以使用操作来执行此操作:
import SpriteKit
import GameplayKit
class GameScene: SKScene {
let kStep:CGFloat = 0.01
let kIncreaseActionKey = "kIncreaseActionkey"
override func sceneDidLoad() {
let increase = SKAction.run {[unowned self] in
//Optionally, you can check here if you want to increase the gravity further
self.physicsWorld.gravity.dy -= self.kStep
print("Gravity is now \(self.physicsWorld.gravity)")
}
let wait = SKAction.wait(forDuration: 1)//wait one second before increasing gravity
let sequence = SKAction.sequence([wait, increase])
let loop = SKAction.repeatForever(sequence)
self.run(loop, withKey: kIncreaseActionKey)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if self.action(forKey: kIncreaseActionKey) != nil{
self.removeAction(forKey: kIncreaseActionKey)
}
}
}