- 色彩推移技術
- 色彩推移を担うフェードインとフェードアウトの技術は先に説明したスクロールと同じく重要なものとなっています。
- 色彩推移技術とは、その名の通り色彩を指定する部分を動的に変化させるものです。iαppliではGraphics.setColor()メソッドを操作します。
- ここで扱われている色彩値はRGB値と呼ばれるもので、ディスプレイを表現する色としてはメジャーな手段です。
- 赤 ―Red― と緑 ―Green― 、そして青 ―Blue― 各色をそれぞれ0〜255の範囲で表現します。
- つまり組み合わせとしては2563=16777216パターンあります。
- このRGB値を動的に変化させる事で色彩推移を実現します。
- 講義の例では3値共一様に変化させていましたが、1つの値だけを個別に変化させる事や、それぞれ違う変数を参照して別々に変動させる事も勿論可能です。
public void paint(Graphics g) {
g.lock();
g.setColor(Graphics.getColorOfRGB(0x00, 0x00, 0x00));
g.fillRect(0, 0, 240, 240);
if (time < 256) {
g.setColor(Graphics.getColorOfRGB(time, 0x00, 0x00));
g.drawString("色", 10, 30);
g.setColor(Graphics.getColorOfRGB(0x00, time, 0x00));
g.drawString("彩", 30, 30);
g.setColor(Graphics.getColorOfRGB(0x00, 0x00, time));
g.drawString("推", 50, 30);
g.setColor(Graphics.getColorOfRGB(time, time, 0x00));
g.drawString("移", 70, 30);
g.setColor(Graphics.getColorOfRGB(0x00, time, time));
g.drawString("t", 90, 30);
g.setColor(Graphics.getColorOfRGB(time, 0x00, time));
g.drawString("i", 110, 30);
g.setColor(Graphics.getColorOfRGB(time, time, time));
g.drawString("m", 130, 30);
g.setColor(Graphics.getColorOfRGB(time, time / 2, 0x00));
g.drawString("e", 150, 30);
g.setColor(Graphics.getColorOfRGB(time / 2, time, 0x00));
g.drawString("参", 170, 30);
g.setColor(Graphics.getColorOfRGB(time / 2, time / 2, 0x00));
g.drawString("照", 190, 30);
}
g.unlock(true);
}
g.lock();
g.setColor(Graphics.getColorOfRGB(0x00, 0x00, 0x00));
g.fillRect(0, 0, 240, 240);
if (time < 256) {
g.setColor(Graphics.getColorOfRGB(time, 0x00, 0x00));
g.drawString("色", 10, 30);
g.setColor(Graphics.getColorOfRGB(0x00, time, 0x00));
g.drawString("彩", 30, 30);
g.setColor(Graphics.getColorOfRGB(0x00, 0x00, time));
g.drawString("推", 50, 30);
g.setColor(Graphics.getColorOfRGB(time, time, 0x00));
g.drawString("移", 70, 30);
g.setColor(Graphics.getColorOfRGB(0x00, time, time));
g.drawString("t", 90, 30);
g.setColor(Graphics.getColorOfRGB(time, 0x00, time));
g.drawString("i", 110, 30);
g.setColor(Graphics.getColorOfRGB(time, time, time));
g.drawString("m", 130, 30);
g.setColor(Graphics.getColorOfRGB(time, time / 2, 0x00));
g.drawString("e", 150, 30);
g.setColor(Graphics.getColorOfRGB(time / 2, time, 0x00));
g.drawString("参", 170, 30);
g.setColor(Graphics.getColorOfRGB(time / 2, time / 2, 0x00));
g.drawString("照", 190, 30);
}
g.unlock(true);
}
- このプログラムは色々な推移を実現したものです。総てtimeの値を参照した色彩推移なので、paint()メソッドだけ上記のものに書き換えて下さい。
- RGB値の範囲
- さて、このプログラムの太字で書いてある部分ですが、このif文はRGB値が255を超えない様にしたものです。
- もし超えてしまうと以下のエラーが投げられ、iαppliは強制的に終了します。
java.lang.IllegalArgumentException: Invalid RGB value
- 投げられたエラーをきちんとcatchしてやれば対処自体は出来るのですが、これから沢山使うであろうGraphics.setColor()1つひとつに態々try〜catchを設けるのは非常に骨が折れます。
- このエラーは少し注意すれば容易に避けられるので、Graphics.setColor()メソッドを使う際に心掛けておけば良いでしょう。