“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

141.HSPでゲームを作ろう:培養臼(BAIOUS) その18

前回は、背景色をgmulcolor命令で変えてバリエーションを作った。ふと、ぼわーっと明るさも変えてみたいなと思った。
これも、gmulcolor命令を使えばできそうなことはすぐにわかった。RGB値を足したり引いたりするのを周期的に行えばよい。
この周期的に繰り返すところをどうするか。はじめはカウンタを別に作って、増減させようと思ったが、三角関数を使うことを思いついた。というか、思い出したw

今回は、初期値が一番明るいところから始まって、暗くなっていくようにしたかったので、cosを使った。
cos(0°)=1なのを利用する。cosのグラフは、横軸に角度を取ると、0度のときが1から始まって、90度で0に、180度で-1になる。360度回るとまた1になる。

このcosの値に、明るさを変更したい幅になる値を掛けて、元から設定しているRGB値から引けばいい(もしくは足せばいい)
この処理のために別のカウンタを作るのは面倒なのでw、1フレーム回るごとに1度進むよう、ゲーム内カウンタを360で割った余りを使うことにした。

fade_c=int(cos(deg2rad(gamecnt\360))*40)
gmulcolor 24,28,143-fade_c

HSP3のcos関数の引数はラジアンであり、度ではない。deg2rad関数を使って、度→ラジアン変換した値を使う。
\演算子は、余りを表す。これに幅の値40を掛けた。
cos関数の計算結果は、浮動小数なので、int関数で丸め込んでやる。
計算した値を使ってgmulcolor命令でフレームごとに色を設定すれば、ぼわーっと背景の明るさを変えられる。

ここで、引き算したのがB(青)の値だけなのは、試行錯誤した結果。はじめはRGBすべての色に対して fade_c を引いていたのだが、色味自体も変わってしまう。
青なら青っぽい、緑なら緑っぽい色のまま、暗くなったり明るくしたい。
単純にRGBの中で一番成分が強い色だけ調整してやると、いい具合になった。