0

我正在设计一款游戏,而这款游戏非常需要为我的地图使用颜色。我想使用渐变以十六进制进行数字计数(如#000001、#000002 等,因为将其全部绘制出来将是一项艰巨的工作),划分山丘等,因为这就是我设计系统工作的方式。所以,在测试这个系统时,我意识到默认渐变是在每种颜色中按步数计算,而不仅仅是像我想要的那样从底部开始计算(我的目标是从 #000000 到 #000CCC,所以它在绿色和蓝色上都加了 1值而不仅仅是蓝色)。我发现了“线性 RGB”复选框选项,并希望它能做到这一点,但不知何故没有。它有时适用于像#00CCCC 这样的值,但是当我尝试#0000000 到#000CCC 时,它会无缘无故地停在#0000CB,尽管它确实只使用蓝色值。我' 我使用 Flash CS4,不确定是我的问题还是其他问题。此外,Flash 文档没有给我关于线性 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 值;但是,这里有关于插值方法的文档:

来自 Adob​​e 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 认可的标准,它定义了红色、绿色和蓝色分量值与可见分量颜色的实际强度之间的非线性转换。

例如,考虑两种颜色之间的简单线性渐变(将 spreadMethod 参数设置为 SpreadMethod.REFLECT)。不同的插值方法对外观的影响如下:

插值方法.LINEAR_RGB 插值方法.RGB

于 2012-05-30T05:58:45.020 回答