0

ゲームをデザインしていますが、そのゲームではマップに色を使用することが非常に必要です。勾配を使用して 16 進数で数値的に数えたいと思いました (#000001、#000002 など、すべてを引き出すのは大変な作業になるため) 。したがって、このシステムをテストしているときに、デフォルトのグラデーションが、私が望んでいたように下からだけでなく、すべての色のステップでカウントされていることに気付きました (私の目標は #000000 から #000CCC までなので、緑と青の両方に 1 を追加していました)だけではなく値)。「リニアRGB」チェックボックスオプションを発見し、それができることを望んでいましたが、どういうわけかそうではありません. #00CCCC のような値で機能することもありますが、#0000000 から #000CCC を試してみると、理由もなく #0000CB で停止しますが、青の値のみを使用してカウントされます。私' m Flash CS4 を使用していますが、それが私の側の問題なのか、他の問題なのかわかりません。また、Flash のドキュメントでは、Linear RGB チェックボックスが何をするのかについての情報はありません。

4

1 に答える 1

1

要件ごとに、これは 0x000000 と 0x000ccc の間の計算ステップの例です

10ステップ

勾配ステップ

32ステップ:

グラデーションステップ-32

var startColor:uint = 0x000000;
var endColor:uint = 0x000ccc;
var steps:uint = 10;

var graphics:Graphics = graphics;

for (var i:uint = 0; i < steps; i++)
{
    var r:uint = ((endColor >>> 16 & 0xFF) - (startColor >>> 16 & 0xFF)) * (i / steps);
    var g:uint = ((endColor >>> 8 & 0xFF) - (startColor >>> 8 & 0xFF)) * (i / steps);
    var b:uint = ((endColor & 0xFF) - (startColor & 0xFF)) * (i / steps);

    var stepColor:uint = r << 16 | g << 8 | b;

    graphics.beginFill(stepColor);
    graphics.drawRect(i * 24, 24, 24, 24);
    graphics.endFill();
}

あなたの問題は、RGB 値を操作している可能性があります。ただし、補間方法に関するドキュメントは次のとおりです。

Adobe Docs flash.display.InterpolationMethod http://livedocs.adobe.com/livecycle/es/sdkHelp/common/langref/flash/display/InterpolationMethod.htmlから

リニア RGB:

線形 RGB 補間方法を使用する必要があることを指定します。これは、Flash Player がリニア RGB カラー モデルに基づく RGB カラー スペースを使用することを意味します。

RGB

RGB 補間方法を使用する必要があることを指定します。これは、Flash Player がグラデーションのレンダリング時に指数 sRGB (標準 RGB) 空間を使用することを意味します。sRGB 空間は、赤、緑、青のコンポーネント値と可視コンポーネント カラーの実際の強度との間の非線形変換を定義する、W3C が承認した標準です。

たとえば、2 つの色の間の単純な線形グラデーションを考えてみます (spreadMethod パラメータを SpreadMethod.REFLECT に設定)。異なる補間方法は、次のように外観に影響します。

InterpolationMethod.LINEAR_RGB InterpolationMethod.RGB

于 2012-05-30T05:58:45.020 に答える