わかりました、私があなたを正しく理解しているなら、あなたは赤から緑、そして青にフェードしたいですか?
カラーデータと状態を保持するための構造体と列挙型から始めます。
public enum PrimaryColor
{
Red,
Green,
Blue
}
public struct Color
{
public byte r;
public byte g;
public byte b;
public Color(byte r, byte g, byte b)
{
this.r = r;
this.g = g;
this.b = b;
}
}
次に、トラバースする配列を含む、状態データを保持するためのいくつかの変数を作成します。
Color ActualColor = new Color(255, 0, 0);
int State = 0;
PrimaryColor[] Order = { PrimaryColor.Red, PrimaryColor.Green, PrimaryColor.Blue };
次に、更新関数(タイマー、whileループなど)で、色を更新し、バイトアンダーフローをチェックし、状態を変更するための小さなswitchステートメントを追加します。
switch (Order[State])
{
case PrimaryColor.Red:
ActualColor.r++;
if(ActualColor.g > 0) ActualColor.g--;
if (ActualColor.b > 0) ActualColor.b--;
if (ActualColor.r == 255 && ActualColor.g == 0 && ActualColor.b == 0) State++;
break;
case PrimaryColor.Green:
ActualColor.g++;
if (ActualColor.r > 0) ActualColor.r--;
if (ActualColor.b > 0) ActualColor.b--;
if (ActualColor.r == 0 && ActualColor.g == 255 && ActualColor.b == 0) State++;
break;
case PrimaryColor.Blue:
ActualColor.b++;
if (ActualColor.g > 0) ActualColor.g--;
if (ActualColor.r > 0) ActualColor.r--;
if (ActualColor.r == 0 && ActualColor.g == 0 && ActualColor.b == 255) State++;
break;
default:
break;
}
if (State == Order.Length) State = 0;
//Send color data to your controller