我知道我可以手动在Flash中应用彩色滤镜,然后动态地将其复制到其他动画片段,如下所示:
newMovieClip.filters = oldMovieClip.filters;
我现在想做的是能够检查两个动画片段是否具有相同的过滤器 像这样:
if (newerMovieClip.filters == oldMovieClip.filters)
...总是出现错误,即使两者有相同的过滤器。我知道如果我使用colorTransform,我可以做这个工作,但在这种情况下我不能。图形的线条和阴影都在一起改变颜色,亮度/色调/对比度都很重要,因此滤镜是关键。 (我正在做的事情:我在菜单中有服装项目,用户通过从我制作的调色板中选择一个过滤按钮来“着色”。当他们点击该项目时,它还没有在那个颜色的头像上,我想要它出现和/或转动那种颜色。如果它已经在化身和相同的颜色,我希望它脱落...因此过滤器检查)
答案 0 :(得分:0)
在这种情况下,我们可以通过moiveclip.filters [0]
获取每个动画片段的每个ColorMatrixFilter然后:
function compareColorFilters(a:ColorMatrixFilter, b:ColorMatrixFilter) : Boolean
{
var length:uint = (a.matrix.length > b.matrix.length)?a.matrix.length:b.matrix.length;
for(var i:uint = 0; i < length; ++i)
{
if(a.matrix[i] != b.matrix[i]) { return false; }
}
return true;
}
然后与movieclips进行比较
if(compareColorFilters(ColorMatrixFilter(oldClip.filters[0]), ColorMatrixFilter(newClip.filters[0])) {
//do stuff
}
正如您所看到的,您从每个moveiClip获取每个ColorMatrixFilters。然后逐个元素地比较矩阵(它只是一个数组)。如果矩阵是相同的......颜色,亮度和色调也完全相同。如果对此感到困惑,请发表评论。
希望这有帮助!
-Travis