优雅地上下计数

mpe*_*pen 2 c++ math logic

我正在尝试制作一个闪烁的对象,即将其alpha值从0增加到255(逐渐)然后再回到0,然后重复.

我有没有办法在不使用布尔值的情况下做到这一点?让它增加很容易:

alpha = time.elapsed()%256;
Run Code Online (Sandbox Code Playgroud)

但在那之后又有什么好办法让它重新计算?

Tom*_*Tom 15

如何使用sin函数,这样褪色更愉快,你会得到你想要的.

  • `alpha = static_cast <int>(sin((time.elapsed()%10)*(M_PI/10))*255);`?我认为?10可以用你想要的任何间隔替换,最好你用常量替换`M_PI/10`(例如`const double frac = M_PI/10;`) (2认同)

sth*_*sth 14

也许你可以这样做:

alpha = abs((time.elapsed() % 510) - 254);
Run Code Online (Sandbox Code Playgroud)


Jor*_*ren 5

abs(((x + 255)%510) - 255)对于0到255之间的x线性地从0到255,并且对于255到510之间的x线性地从255到0.然后它重复(当然时间段为510) ).