【问题标题】:Smooth transition between values (ease in/out)值之间的平滑过渡(缓入/缓出)
【发布时间】:2018-07-15 10:10:14
【问题描述】:

我可能会因为提出这个问题而受到负面评价,但我被困住了,需要帮助。 我需要在两个值之间做一个漂亮而平滑的缓动,结果显示在一个文本框中。例如,我的文本框显示“125”,必须在 2.5 秒内平滑增长到“25000”,并具有良好的二次加速和减速曲线。我不擅长 C#,我习惯于“破解”我可以在网络上找到的代码片段,并将它们一起构建来做我需要的事情,但是,为此,我找不到任何我能找到的东西使用至今。 有没有人可以很好地给我指示、链接,或者甚至更好的工作代码来做到这一点? 非常感谢 文斯。

【问题讨论】:

  • “更好的工作代码来做到这一点”请发布非工作版本,我们可以尝试帮助您修复它。啊,别忘了描述你卡在哪里,错误信息等等......
  • 如果您告诉我们您正在使用哪个 UI 框架,它会有所帮助,它是 WPF 吗?窗体?还有什么?我很确定您使用的任何 UI 框架都会有“补间”NuGet 包
  • 我只是投票关闭作为题外话,因为关于教程和文档内容的问题在 StackOverflow 上是题外话。
  • 一段不工作的代码:嗯......我什至没有这样一个不工作的代码。当我在网上搜索如何在值之间进行平滑的二次转换时,我没有得到可以尝试或使用的东西。大多数答案都是针对使用在 VisualStudio 中不起作用的 Lerp 函数的 Unity。
  • 至于 UI,我使用的是基本的 Winform。谢谢

标签: c# transition smoothing easing quadratic


【解决方案1】:

我发现最简单的方法是使用二次公式(正如您已经弄清楚的那样)。有在线计算器可以给你一个使用三个点的抛物线方程,当取 (0, 125)、(2.5, 25000) 和 (5, 125) 时,我们得到一个方程 y = -3980x^2 + 19900x + 125。翻译成 C#,这给了我们:

var foo = -3980 * Math.Power(bar, 2) + 19900 * bar + 125;

之后,我们可以使用for 循环和一小段sleep 时间从bar = 0 平滑过渡到bar = 2.5

【讨论】:

  • 非常感谢您的快速回答。我会看看这个,看看我是否可以让它工作(主要是因为我给出的示例值只是示例,并且每次都会不同,所以我需要弄清楚如何即时计算方程)。 ;)
  • @MadeByVince 在这种情况下,生成一堆在 0 和 5 处与 x 轴相交的抛物线,然后查看可以将值乘以哪个基本方程以获得所需的方程。跨度>
  • @MadeByVince 另外,我突然想到,“缓入缓出”函数可能更适用于正弦波而不是二次方程,因为这将在两端拉平地区。
猜你喜欢
  • 2016-05-10
  • 2014-04-15
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多