在 Flash/Animate 中以视觉/手动方式和代码处理颜色的方法?

Posted

技术标签:

【中文标题】在 Flash/Animate 中以视觉/手动方式和代码处理颜色的方法?【英文标题】:Way to handle colors visually/manually AND with code, in Flash/Animate? 【发布时间】:2016-09-29 21:27:48 【问题描述】:

我以前在 Animate 中使用过很多滤镜,非常棒,因为我可以手工制作一个颜色滤镜,看看它是什么样子,然后也可以将代码集成到其中,例如:

object.filters = e.currentTarget.filters;

但我正在努力做好并远离过滤器以降低处理能力等。另外,过滤器不接受十六进制代码。所以我正在尝试使用 colorTransforms。但是现在事情变得非常笨拙,因为我弄清楚我想要哪种颜色,在记事本中写下所有十六进制代码,然后编写代码将事物转换为那种颜色。在我发布文件之前,我仍然看不到颜色的相互作用。没有一些方法可以手动摆弄 colorTransforms 吗?也许颜色效果下的高级部分 -> 样式?

我如何想象这发生在我的幻想中是: 我有一些可以交互创建织物样本的电影剪辑。我摆弄 colorTransform 或 SOMEhow 手动向它们应用十六进制代码(不是在代码中动态地),然后我可以使用这些色板动态地为其他东西着色,例如:

newFabric.topPattern.colorTransform.color = fabricSwatch.topPattern.colorTransform.color;

我知道如果我先使用代码添加颜色,我可以做到这一点。但是有没有办法在舞台上/视觉/手动添加颜色,然后让代码向前滚动?我知道我可以绘制位图并对像素的颜色进行采样,但是这些图案都有非常精细、不同且复杂的形状和透明度,因此在这里不起作用:/

【问题讨论】:

【参考方案1】:

有很多关于使用颜色变换的教程——比如this one。

至于使用十六进制颜色,您可以非常轻松地在各种颜色表示之间来回转换。一个简单的谷歌搜索出现了这个snippet:

var brightPinkHex:uint = 0xFF32CC;
var brightPinkRGB:Object = HexToRGB(brightPinkHex);
trace(brightPinkRGB.r+ ", " + brightPinkRGB.g + ", " + brightPinkRGB.b);

function HexToRGB(value:uint):Object   
    var rgb:Object = new Object();
    rgb.r = (value >> 16) & 0xFF
    rgb.g = (value >> 8) & 0xFF
    rgb.b = value & 0xFF            
    return rgb;


// OUTPUT
// 255, 50, 204

【讨论】:

谢谢.. 但是您如何在舞台上更改十六进制代码和通过代码之间进行交互? “与大多数其他简单属性(如 alpha、x、y、宽度和高度)不同,对象的颜色不能直接在对象本身上更改。”有什么解决办法吗?【参考方案2】:

好的!我找到了解决方法! \o/

我可以手动编辑色调,甚至可以输入十六进制代码或从我的预制调色板中滴眼液颜色。我只需要确保将色调上的“色调”设置为 100%。 (色彩效果 -> 风格:色调)

现在我只需使用 colorTransform 代码,它就可以拉出我手动放置的 Tint,并将其转移到其他项目:

grl.overlay.shapes.transform.colorTransform = e.currentTarget.shapes.transform.colorTransform;

我什至不必更改我的代码,这比过滤器更好,因为我可以输入十六进制代码。我不知道这对过滤器的性能有何影响,但有人告诉我这应该不会太糟糕,因为没有任何动画。我很高兴:)

【讨论】:

以上是关于在 Flash/Animate 中以视觉/手动方式和代码处理颜色的方法?的主要内容,如果未能解决你的问题,请参考以下文章

AS3 如何将 adMob 添加到 Adob​​e Flash/Animate?

Confluence 6 Windows 中以服务方式自动重启为服务手动安装 Confluence 分发包

如何根据当前目录在 Konsole 中以编程方式更改颜色?

在sql server中以编程方式将内置帐户更改为本地系统

如何在 Linux Mint 中以编程方式发送密钥(模拟密钥输入)?

在 android 中以编程方式使用谷歌日历添加同步事件