質問

私は最初の Flash プロジェクトに取り組んでおり、プリローダーでは、ロードされたパーセンテージに基づいて非常に単純なグラデーションを実行したいと考えています。プリローダーには「77% ロードされました...」と表示されます。ここで、数字 77 は、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 で何かが起こっていて、それを Number として渡しているのでしょうか?

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

ありがとう!

役に立ちましたか?

解決

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

これは近いです。

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

percentLoaded.textColor = uint((currentValue / 100) * 0xFF) * 0x010101;

他のヒント

幸運なことに、私はたまたまつい最近、プロジェクトでこれを別の色だけで実行したことがあります。これは、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);
}

タイラー。

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

これがうまくいくなら

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

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

var percent = currentValue / 100;
percentLoaded.textColor = Math.floor(percent*0xFF) * 0x010101;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top