使用 SKPhysicsBody linearDamping Swift 4 提高节点速度

Increase Node Speed with SKPhysicsBody linearDamping Swift 4

我从我的 GameScene

调用了以下 class

func update(_ currentTime: TimeInterval)

因为它在那里被调用,所以我的 class 每秒都被调用,这让我想到了这个。我目前有我的 self.physicsBody?.linearDamping = 0.6 但我如何增加这个数字以便我也可以提高速度?我打算使用另一个计时器,直到我意识到我的 SKSpriteNode class 每秒都被调用。不太确定如何解决这个问题,有什么想法吗?我基本上想每 2.0 秒减少一次该数字,而不让更新功能妨碍。

任何时候你想在 sprite-Kit 游戏中以固定的时间间隔做某事,你可以按如下方式实现:

首先声明 2 个属性(在你的 class 但在所有函数定义之外)

var timeOfLastThing: CFTimeInterval = 0.0
var timePerThing: CFTimeInterval = 2.0    // How often to do the thing

(如果你想每 2 秒做的事情是生成一个怪物,那么你可以调用这些 timeOfLastMonsterSpawntimePerMonsterSpawn,但这取决于你)

然后,在Update中检查是否超过了timePerThing。如果是这样,请调用您的 doThing 函数来执行您需要的操作,然后重置自上次调用以来的时间:

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
    if (currentTime - timeOfLastThing > timePerThing) {
       doThing()
       self.timeOfLastThing = currentTime
    }
}

func doThing() {
       // Your spawn code here
}

使 doThing 成为一个单独的函数(相对于它在 update() 中的行)的好处是您可以从 didMoveToView 或任何其他地方调用它在正常的时间控制周期之外生成对象。

您可以根据需要更改 timePerThing 的值以控制事情发生的速度。

您也可以考虑创建一个 SKAction 以指定的时间间隔运行 doThing,但我认为要更改生成对象的速率,您必须删除并重新- 创建 SKAction,你可以在 setter for timePerThing.

中执行此操作

你真的不应该在 SpriteKit 中使用 NSTimer,因为 SpriteKit 引擎不知道定时器在做什么并且无法控制它(一个例子是定时器保持 运行 并做一些事情即使您将场景设置为暂停)。