1

我试图通过随着玩家得分的增加而增加重力来增加游戏的难度。我不完全确定如何实现这一点,当我在这里尝试使用解决方案时:Any way to speed up game faster in Swift?

但是,我不确定如何在我的游戏中实现它,以便它逐渐增加重力

这是我的代码:

override func update(_ currentTime: TimeInterval) {
    // Altered the gravity drastically
    // self.physicsWorld.gravity = CGVector(dx: 0, dy: CGFloat(self.score))
}
4

3 回答 3

1

像这样定期安排计时器并增加重力

override func didMove(to view: SKView) {

    let increasingDifficultyPeriod = TimeInterval(60)

    Timer.scheduledTimer(withTimeInterval: increasingDifficultyPeriod,
                         repeats: true)
    { _ in
        // increase currentGravity property here
        self.physicsWorld.gravity.dy -= CGFloat(0.1)
    } 
}
于 2018-01-16T17:05:22.120 回答
1

由于几个原因,我会远离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)
        }
    }
}
于 2018-01-16T22:24:14.623 回答
0

为什么不在分数变化的同时改变重力?最好是在分数变化时计算新的重力值,并将其分配给 中的世界didFinishUpdate

于 2018-01-17T08:49:50.183 回答