我无法在我的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可能不会导致实际更改显示颜色。有谁知道更多关于这些情况?如何在所有情况下改变颜色?
问候。
答案 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()。