我正在处理我的第一个Flash项目,并且对于我的预加载器,我想根据加载的百分比做一个非常简单的渐变。预加载器说“77%加载...”,其中数字77是一个名为percentLoaded的动态文本实例。我希望percentLoaded的textColor以灰度级从#000000到#FFFFFF的渐变更改。基于加载文件百分比的RGB渐变
因此,我不能简单地做:
percentLoaded.textColor=(currentValue/100)*0xFFFFFF;
这只是转换的文字颜色到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的代码。
谢谢!
这不起作用。尝试将currentValue设置为1.您将获得0x28f5c。您需要在乘以0x010101之前将((currentValue/100)* 0xFF)强制转换为int。 – Ponkadoodle 2010-01-21 01:05:53
没错,我忘记了,修好了;谢谢你的注意!演员实际上需要继续进行除法结果,因为这就是它发生的原因 - Flash的'Number'类是IEE浮点数。投向uint应该可以解决它。 – LiraNuna 2010-01-21 01:08:14
不,当前值介于0-100之间。如果你在分割之后进行投射,但在乘以0xFF之前,你会得到一个0或1.他想要全灰度,而不仅仅是黑/白。而且这个问题并不是浮点不准确。这是因为你的格式(* 0x010101)基本上是三个字段(01,01,01)。它并不期待一个领域的某些东西受到另一个领域的影响。但是使用大于255的值,允许低场影响高场,而在整数之间的值允许高场影响较低场。试试1.5 * 0x010101来看看我的意思。 – Ponkadoodle 2010-01-21 01:18:42