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

时间:2017-10-18 18:47:06

标签: swift sprite-kit skspritenode skphysicsbody

我从我的GameScene

调用了下面的类
  

func update(_ currentTime:TimeInterval)

因为它在那里被召唤,所以我的班级每秒都被召唤,这引导我去做。我目前有自我物理系统?.linearDamping = 0.6但是我如何增加这个数字以便我也可以提高速度?我打算使用另一个Timer,直到我意识到我的SKSpriteNode类每秒都被调用。不太确定如何解决这个问题,任何想法?我基本上希望每2.0秒减少一次这个数字,而不会让更新功能受阻。

1 个答案:

答案 0 :(得分:2)

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

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

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的{​​{1}},但我认为要更改生成对象的速率,您必须删除并重新创建SKAction,您可以在doThing的设置器中执行此操作。

你不应该在SpriteKit中真正使用NSTimer,因为SpriteKit引擎将不知道计时器正在做什么并且无法控制它(一个例子是即使你设置场景,计时器仍在运行并做东西暂停了。)