动态获取/比较Flash滤镜

时间:2014-02-07 19:09:09

标签: actionscript-3 flash colorfilter

我知道我可以手动在Flash中应用彩色滤镜,然后动态地将其复制到其他动画片段,如下所示:

newMovieClip.filters = oldMovieClip.filters;

我现在想做的是能够检查两个动画片段是否具有相同的过滤器 像这样:

if (newerMovieClip.filters == oldMovieClip.filters)

...总是出现错误,即使两者有相同的过滤器。我知道如果我使用colorTransform,我可以做这个工作,但在这种情况下我不能。图形的线条和阴影都在一起改变颜色,亮度/色调/对比度都很重要,因此滤镜是关键。 (我正在做的事情:我在菜单中有服装项目,用户通过从我制作的调色板中选择一个过滤按钮来“着色”。当他们点击该项目时,它还没有在那个颜色的头像上,我想要它出现和/或转动那种颜色。如果它已经在化身和相同的颜色,我希望它脱落...因此过滤器检查)

1 个答案:

答案 0 :(得分:0)

编辑:我现在看到你只处理彩色滤镜。啊。我明白现在要做什么。

如果这是每个Movieclip上唯一的过滤器,这可以使事情变得容易一些。

在这种情况下,我们可以通过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