【问题标题】:Increase Node Speed with SKPhysicsBody linearDamping Swift 4使用 SKPhysicsBody linearDamping Swift 4 提高节点速度
【发布时间】:2017-10-18 18:47:05
【问题描述】:

我的 GameScene 调用了以下类

函数更新(_ currentTime: TimeInterval)

自从那里被调用以来,我的班级每秒都被调用,这导致我这样做。我目前有我的 self.physicsBody?.linearDamping = 0.6 但我将如何增加该数字以便我也可以提高速度?我打算使用另一个 Timer,直到我意识到我的 SKSpriteNode 类每秒都被调用。不太清楚该怎么做,有什么想法吗?我基本上希望每 2.0 秒减少一次该数字,而不会妨碍更新功能。

【问题讨论】:

    标签: swift sprite-kit skspritenode skphysicsbody


    【解决方案1】:

    任何时候你想在 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 以指定时间间隔运行 doThing,但我认为要更改生成对象的速率,您必须删除并重新创建 SKAction,它您可以在 timePerThing 的设置器中执行此操作。

    您不应该在 SpriteKit 中真正使用 NSTimer,因为 SpriteKit 引擎将不知道计时器正在做什么并且无法控制它(一个示例是即使您设置了场景,计时器也会继续运行并做一些事情暂停)。

    【讨论】:

    • 不确定在您的答案中添加到哪里,但我建议在操作和节点上提及 speed 变量以使节点快速移动
    • 线性阻尼不是速度,它是像空气或水一样的阻力
    • 不知道,当他们离我超过 5 英尺时,我缺乏读心的能力。但显而易见的答案是设置一个断点以找出它回到 1 的位置
    • 起初,当我阅读答案时,我想多了,看错了。现在我明白了他的意思并弄清楚了我的问题。感谢史蒂夫!
    • @Knight0fDragon 你能看看我最近的问题吗? stackoverflow.com/questions/47463717/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多