代码之家  ›  专栏  ›  技术社区  ›  Dewan

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

  •  1
  • Dewan  · 技术社区  · 7 年前

    我的游戏场景调用了下面的类

    func更新(_currentTime:TimeInterval)

    因为它在那里被调用,我的课每一秒都被调用,这让我想到了这一点。我现在有我自己。physicsBody?。线性阻尼=0.6,但我如何增加该数字,以便也可以提高速度?我本来打算使用另一个计时器,直到我意识到我的SKSpriteNode类每秒都在被调用。不太确定该怎么办,有什么想法吗?我基本上希望每2.0秒减少一次这个数字,而不让更新函数碍事。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Steve Ives    7 年前

    在精灵套件游戏中,任何时候你想按固定时间间隔做某事,都可以按如下方式实现:

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

    (如果你想每2秒做一件事,就是产生一个怪物,那么你可以称之为 timeOfLastMonsterSpawn timePerMonsterSpawn ,但这取决于你)

    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 或者在正常时间控制周期之外的任何其他地方生成对象。

    您可以更改 时间规划 以控制事情发生的速度。

    你也可以考虑创建一个 SKAction 运行 doThing公司 在指定的时间间隔,但我认为要更改生成对象的速率,您必须删除并重新创建SKAction,您可以在setter中为其执行此操作 时间规划 .

    您不应该在SpriteKit中真正使用NSTimer,因为SpriteKit引擎将不知道计时器正在做什么,并且无法控制它(例如,即使您将场景设置为暂停,计时器也会一直运行并执行操作)。