在AS1中动态更改颜色

时间:2009-04-29 13:08:28

标签: actionscript colors

我无法在我的AS1应用程序中使用它。我正在使用Color.setTransform方法。

我认为以下对象创建应该导致将颜色转换为白色吗?

var AColorTransform = {ra:100,rb:255,ga:100,gb:255,ba:100,bb:255,aa:100,ab:255};

这个要黑了吗?

AColorTransform = {ra:100,rb:-255,ga:100,gb:-255,ba:100,bb:-255,aa:100,ab:-255};

我在一些网站上看到,当您执行操作的对象具有某种动态行为时,调用setRGB或setTransform可能不会导致实际更改显示颜色。有谁知道更多关于这些情况?如何在所有情况下改变颜色?

问候。

1 个答案:

答案 0 :(得分:1)

很长一段时间以来,我必须做任何事情都是AS1,但我会尽我所能。

color.setTransform()的基本代码如下所示......

var AColorTransform = {ra:100, rb:255, ga:100, gb:255, ba:100, bb:255, aa:100, ab:255};
var myColor = new Color(mc);
myColor.setTransform(AColorTransform);

...其中mc是某个舞台上的MovieClip。

请记住,您正在询问转换,其本质上旨在将的颜色从转换为的其他内容。如果你想要以特定的颜色(如黑色或白色)可靠地绘画,那么使用setRGB通常会好得多,如下所示:

var myColor = new Color(mc);
//set to black
myColor.setRGB(0x000000);
//or set to white
myColor.setRGB(0xFFFFFF);

这些工作可靠,但可能存在一些问题。通常,只需记住颜色附加到特定的MovieClip ...所以如果MovieClip超出范围(即它从时间轴中消失),您的颜色将随之删除。


只有在想要更好地理解颜色转换时才进一步阅读:

让我们看一下颜色转换的组成部分。

    a (multiplier 0 > 100%)   b(offset -255 > 255)
r       ra                       rb

g       ga                       gb

b       ba                       bb

a       aa                       bb

有四个通道(r,g,b和a)。前三个是红色,绿色和蓝色,最后一个是alpha(透明度)。每个通道都有一个'a'组件和一个'b'组件,因此有ra,rb,ga,gb等.'a'组件是一个百分比乘数。也就是说,它会将任何现有通道乘以该值中的百分比。 'b'组件是一个偏移量。所以'ra'乘以现有的红色通道。 'rb'抵消了它。如果您的红色通道以“FF”(红色为满)开始,则设置ra:100将无效,因为将FF乘以100%将导致无变化。同样,如果红色从'00'开始(根本没有红色),那么'ra'的值就不会产生任何影响,因为(如果你记得你的莎士比亚)两次没有任何东西仍然没有。介于两者之间的东西会随着你的预期而倍增。

乘法后添加偏移量。所以你可以乘以某个值,然后抵消它:

r (result red color) = (RR * ra%) + rb
g (result green color) = (GG * ga%) + gb
b (result blue color) = (BB * ba%) + bb
a (result alpha) = (AA * aa%) + ab

示例:RR = 128(十六进制0x80),ra = 50(50%或.5),rb = -20

产生红色通道:(128 * .5)+( - 20)= 44(十六进制0x2C)

坦率地说,这一切都让人感到困惑,以至于我更倾向于完全避免变换的简单理智,而是选择更简单的setRGB()。