乒乓球值随着时间的推移而减小,以实现闪烁效果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了乒乓球值随着时间的推移而减小,以实现闪烁效果相关的知识,希望对你有一定的参考价值。

我需要这样的功能。水平值是时间,垂直是输出。从时间0开始,值应为-11。增加时间量,该值应该是1-1,每次“反弹”时减少距离。

我过去用hackish代码完成了它:在变量中存储目标值,每次值达到目标值时,我都会执行targetValue *= -.5,依此类推。

也许有一个更好的实现使用数学函数,不需要手动执行此操作。对我来说,它就像一个三角函数,但最终输出乘以1 - (time / maxTime),它不是波浪而是线条。

答案

如果你对确切的形状不感兴趣,那么targetValue *= -.5正是我要做的,只要在绘制图形的函数的调用之间的时间增量是相等的。我认为这是一个很好的选择的原因是它是最简单的选择,可以做你想要的。如果时间增量不相等,你可能希望得到与 - (time-Increment)成比例而不是总是-.5的东西。

另一答案

如果“目标值”的减少是线性的,如图所示,那么:

  • 将您的时间步长标准化为1,并使得到0的标准化周期数为n。
  • 从targetValue = -1开始,
  • 有更简单的方法来编写代码,但这是一个清晰的版本。它是用SAS OPTMODEL代码编写的,但如果您无法访问OPTMODEL,您应该能够轻松地将其翻译成任何语言: proc optmodel; num targetValue init -1; num n init 3; num series{ t in 1 .. 2*n + 1} = if t = 1 then targetValue else -series[t - 1] + mod(t,2)* (1 / n); print series; quit;

如果您使用常数而不是减去常数的乘积,则系列将仅在限制中达到0。

另一答案

由于这是针对游戏的闪烁效果(因此被击中的角色开始缓慢闪烁然后更快地闪烁),我最终根据@Blender答案制作了解决方案。

Wolfram Alpha Plot

唯一的区别是,除了使垂直弹跳间隔更小外,它还使水平弹跳间隔更小。

AS3中的代码是:

// flickerTime is a Number between 0 and max, in seconds.
// max is the amount in seconds that the flickering effect lasts
// 10 is a constant that can be changed if we want more or less flickers in that amount of time
var max:Number = 3;
var flick:Number = Math.cos(this.flickerTime * this.flickerTime * 10) * (max - this.flickerTime) / max;
this.visible = flick > 0;

以上是关于乒乓球值随着时间的推移而减小,以实现闪烁效果的主要内容,如果未能解决你的问题,请参考以下文章

Tkinter — 随着时间的推移执行函数

使用 SKSpriteNode 快速创建健康进度条

一种有效的分位数算法/数据结构,允许样本随着时间的推移而更新?

ViewPager 片段随着时间的推移而被破坏?

swift spritekit 随着游戏时间的推移增加重力?

如何使用 DB2 sql 代码动态地将列转置为表的行,其中列可能会随着时间的推移而增加且无需更改代码?