【问题标题】:How to use timing function for slowly speed up scaling function with SpriteKit如何使用计时功能通过 SpriteKit 缓慢加速缩放功能
【发布时间】:2018-01-30 04:49:18
【问题描述】:

我有一个想要扩展的精灵。我正在使用 scaleTo skaction 来执行此操作...我希望它慢慢适应。这是我最初的解决方案:

    let scal = SKAction.scale(by: 100, duration: 10)
    scal.timingMode = SKActionTimingMode.easeIn

问题在于,当它向外扩展时,由于它向外扩展的幅度如此之大,它似乎会变慢。所以我需要使用 timeingFunction 来为动作编写一个自定义的easeIn。

https://youtu.be/CE-B27gSXJI

在视频中,您可以看到它似乎开始时快而慢。之所以会出现这种情况,是因为我要放一个秤,而且你走的越大,它出现的就越慢……

问题:我不知道如何使用计时功能来做到这一点,而且我一直无法找到一个好的来源作为参考?

任何帮助将不胜感激,谢谢!!!

【问题讨论】:

    标签: ios swift sprite-kit scale skaction


    【解决方案1】:

    查看 Ray Wenderlich 的 Sprite Kit Utils 示例,了解如何编写缓动函数:https://github.com/raywenderlich/SKTUtils 具体来说,请查看 SKTTimingFunctions.swift 和 SKTEffects.swift。

    有一些简洁的功能可以让您更好地控制缓动。您甚至可能想使用那里定义的缓动函数而不作任何更改,它们中的大多数都工作得很好。有关每个缓动函数如何表现的参考,您可以查看http://easings.net

    希望这会有所帮助!

    【讨论】:

    • 哇哦!这是完美的,并且在大多数情况下非常简单......要清楚,这就是我将如何使用这样一个函数:scal.timingFunction = SKTTimingFunctionQuarticEaseIn(10) 我不是在我的电脑上测试这个,但是如何我会确定我传递给函数的 CGFloat 吗?谢谢!
    • @Discoveringmypath 很高兴它有帮助!我不会将 CGFloat 传递给函数,而只是让 scaleEffect = SKTScaleEffect( /* all the input paramaters that required */);让 scaleEffect.timingFunction = SKTTimingFunctionQuarticEaseIn; node.runAction(SKAction.actionWithEffect(scaleEffect))
    • 感谢您的回复,现在我对这个计时功能的工作原理感到困惑......有没有办法在没有他的助手类的情况下单独使用计时功能......我更愿意了解如何使用它们以及正在发生的事情,而不仅仅是即插即用......我感谢迄今为止的帮助,我将接受你的回答。你能解释一下我如何单独使用计时功能吗?
    • @Discoveringmypath 据我了解,在第一次更新中,节点比例调整了 x%。每次更新时,x 的增长速度都会增加。所以在第二次更新中,比例增加了 x + x' 百分比。在第 3 次更新中,是 x + x'' + x''' 等。对不起,我不能给你更多细节,我自己对缓动函数不太了解,这就是为什么我使用 Ray 的函数有点调整:)
    • 感谢您的理解。我希望 Apple 的文档能对此进行更多说明。我还发布了一个答案来展示我最终是如何做到的......
    【解决方案2】:

    我将把上面的答案标记为正确,但这最终成为了我的解决方案,我想分享一下,因为它很容易实现。

    我不完全理解它是如何工作的,但是当您为 timingFunction 指定函数时,您必须包含 "t in"。然后就可以用这个t来操作动画的时间了。

    因此,如果您查看上面的链接,您可以通过使用 Ray 的 SKTTimingFunctions.swift 中的函数中包含的内容来获得所需的效果。

    下面的代码展示了我是如何使用它的;我的计时功能开始很慢,然后慢慢加快速度...再次查看上面的链接,您会有所了解。

    let scal = SKAction.scale(by: 100, duration: 10)
    scal.timingFunction = { t in
        return t*t*t*t*t
    }
    

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 2017-07-28
      • 2012-08-25
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多