5

私は最初のFlashプロジェクトに取り組んでおり、プリローダーの場合、ロードされたパーセンテージに基づいて非常に単純なグラデーションを実行したいと思います。プリローダーは「77%loaded ...」と表示します。ここで、77という数字はpercentLoadedと呼ばれる動的テキストインスタンスです。グレースケールで、percentLoadedのtextColorを#000000から#FFFFFFへのグラデーションで変更したいと思います。

したがって、私は単純に行うことはできません:

percentLoaded.textColor=(currentValue/100)*0xFFFFFF;

これは、textColorをFFFFFFの倍数に変換するだけですが、3つの別個のコンポーネントではないため、色を出力します。現在、私が持っているものは次のとおりです。

percentLoaded.text=currentValue.toString();
percentLoaded.textColor=rgb2hex((currentValue/100)*255, (currentValue/100)*255, (currentValue/100)*255);

ここで、「rgb2hex」はクラス内でそのように定義された関数です。

public function rgb2hex(r:Number, g:Number, b:Number) {
    return '0x'+(r << 16 | g << 8 | b).toString(16).toUpperCase();
}

ただし、これが実際にフォントの色を変更しているようには見えません。flash.text.TextFieldとflash.display.MovieClipをインポートしましたが、他に何かが足りないかどうかわかりません。これは文字列の連結で行うのが簡単でしょうか?または、currentValue / 100で何かが起こっていて、それを数値として渡すことはありますか?

興味があれば、ここでrgb2hexのコードを見つけました。

ありがとう!

4

4 に答える 4

6
percentLoaded.textColor=(currentValue/100)*0xFFFFFF;

これは近いです。

グレースケールを取得するには、実際に各コンポーネントが必要ですが、これは同様の方法で実行できます。

percentLoaded.textColor = uint((currentValue / 100) * 0xFF) * 0x010101;
于 2010-01-21T01:00:30.967 に答える
3

幸運なことに、私はたまたま、プロジェクトでこれを別の色だけで行ったことがあります. これは、0 ~ 1 の範囲に基づいて、他の 2 つの色の間の色の値を返す関数です。コードは一目瞭然だと思いますが、問題が発生した場合はお知らせください。

private function getBetweenColourByPercent(value:Number = 0.5 /* 0-1 */, highColor:uint = 0xFFFFFF, lowColor:uint = 0x000000):uint {
    var r:uint = highColor >> 16;
    var g:uint = highColor >> 8 & 0xFF;
    var b:uint = highColor & 0xFF;

    r += ((lowColor >> 16) - r) * value;
    g += ((lowColor >> 8 & 0xFF) - g) * value;
    b += ((lowColor & 0xFF) - b) * value;

    return (r << 16 | g << 8 | b);
}

タイラー。

于 2010-01-21T04:18:36.997 に答える
1
percentLoaded.textColor = int((currentValue / 100) * 0xFF) * 0x010101;

0x010101を乗算する前にintにキャストする必要があります。8ビットのカラー値は、0〜255の整数のみにすることができます。これらの範囲内にない場合、0x010101を乗算すると、ある色成分(RR、GG、BB)から別の色成分(B-> G、G-> R)に数値がオーバーフローする可能性があります。ただし、整数でない場合は、逆の方法で実行することもできます(R-> G、G-> B)。currentValueは0〜100の間の任意の数値であると想定しています。

これを考慮してください。各桁には独自の色成分(10進数)があります。

5.0 * 111 = 555 = 5R, 5G, 5B
5.5 * 111 = 610.5 = 6R, 1G, 0.5B
于 2010-01-21T00:59:42.937 に答える
1

これがうまくいくなら

percentLoaded.textColor=(currentValue/100)*0xFFFFFF;

それからあなたはただすることができます

var percent = currentValue / 100;
percentLoaded.textColor = Math.floor(percent*0xFF) * 0x010101;
于 2010-01-21T01:01:31.137 に答える