我正在设计一款游戏,而这款游戏非常需要为我的地图使用颜色。我想使用渐变以十六进制进行数字计数(如#000001、#000002 等,因为将其全部绘制出来将是一项艰巨的工作),划分山丘等,因为这就是我设计系统工作的方式。所以,在测试这个系统时,我意识到默认渐变是在每种颜色中按步数计算,而不仅仅是像我想要的那样从底部开始计算(我的目标是从 #000000 到 #000CCC,所以它在绿色和蓝色上都加了 1值而不仅仅是蓝色)。我发现了“线性 RGB”复选框选项,并希望它能做到这一点,但不知何故没有。它有时适用于像#00CCCC 这样的值,但是当我尝试#0000000 到#000CCC 时,它会无缘无故地停在#0000CB,尽管它确实只使用蓝色值。我' 我使用 Flash CS4,不确定是我的问题还是其他问题。此外,Flash 文档没有给我关于线性 RGB 复选框的作用的信息,所以如果有人可以帮助解释它,那也很棒。
问问题
252 次
1 回答
1
根据您的要求,这是 0x000000 和 0x000ccc 之间的计算步骤示例
10步
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 认可的标准,它定义了红色、绿色和蓝色分量值与可见分量颜色的实际强度之间的非线性转换。
例如,考虑两种颜色之间的简单线性渐变(将 spreadMethod 参数设置为 SpreadMethod.REFLECT)。不同的插值方法对外观的影响如下:
插值方法.LINEAR_RGB 插值方法.RGB
于 2012-05-30T05:58:45.020 回答