基于加载文件百分比的RGB渐变

时间:2010-01-21 00:53:02

标签: flash actionscript-3 hex rgb gradient

我正在开发我的第一个Flash项目,对于我的预加载器,我想根据加载的百分比做一个非常简单的渐变。预加载器显示“77%加载...”,其中数字77是一个名为percentLoaded的动态文本实例。我希望textLolor of percentLoaded在#000000到#FFFFFF的渐变上以灰度变化。

因此,我不能简单地做到:

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

这只是将textColor转换为FFFFFF的倍数,但输出颜色,因为它不是三个独立的组件。目前,这就是我所拥有的:

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 here的代码。

谢谢!

4 个答案:

答案 0 :(得分:6)

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

这很接近。

要获得灰度,你确实需要拥有每个组件,但这仍然可以通过你的类似方法完成:

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

答案 1 :(得分:3)

你很幸运,我碰巧最近在一个项目中做过这件事,只是用不同的颜色。这是一个函数,它将返回两种其他颜色之间的颜色值,基于0-1的范围。我认为代码非常自我解释,但如果您遇到任何问题,请告诉我。

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);
}

泰勒。

答案 2 :(得分: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之间的任何数字。

考虑一下,每个数字都有自己的颜色成分(十进制):

5.0 * 111 = 555 = 5R, 5G, 5B
5.5 * 111 = 610.5 = 6R, 1G, 0.5B

答案 3 :(得分:1)

如果这对你有用

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

然后你可以做

var percent = currentValue / 100;
percentLoaded.textColor = Math.floor(percent*0xFF) * 0x010101;