点滅マクロ

inline int BLINK_(int timer,int base,double spd) { return abs((int)(timer*spd)%base*2-base); }

使い方:
timerに現在のカウント
baseに最大上昇値
spdにスピード

while(true) {
  timer++;
  Opacity = BLINK_(timer,30,1);
}

これでOpacityには0〜30の値が入る。30まで行き着いたら次は戻ってくるのがポイント。画像の透明度などに指定してあげることで、点滅するグラフィックが作れる。

解説

1ずつ加算されるtimerを使って何とか上下する数字を作りたい。

Opacity = timer%30;

こうすると0から29まで上り、30になった瞬間0になる。点滅といえば点滅だが見た目的に変だ。最大値まで上がったら、次は最大値-1がいい。そんなこと出来るのか。出来るのだ。

Opacity = abs(timer%60-30);

abs()は絶対値を求める関数である。括弧の中身は、timer%60が0〜59なので、-30すると-30〜29になる。29の次は-30だ。それをabsでくくってしまうので、29の次は30。そしてその次は29になる。出来上がりだ。

Opacity = abs(timer*2%60-30);

こうすると、点滅速度は二倍になる。説明不要。

ちなみに、absの代わりにsinを使うと面白いBLINKもつくれる。

inline int BLINK2_(int timer,int base,double spd) { return base * sin(timer/100.0*spd); }

100.0の部分はお好みで。