将过滤器应用于AS3中的所有内容

时间:2009-07-27 16:33:28

标签: flash actionscript-3 flex3 filter

我正在尝试在AS3 / Flex SDK中添加过滤器。我可以为任何一个单独的对象添加一个过滤器 - 但是我想将过滤器应用于某个对象的子项

认为暂停窗口会弹出,暂停窗口下方的所有内容都会变得模糊。

对每个单独的对象应用过滤器(例如:迭代列表)不起作用,因为每个对象的过滤器可能会重叠并且看起来很丑陋。

有谁知道怎么做这个?有没有办法将过滤器应用于所有内容

以下是代码的简化版本:

myCanvas.graphics.beginFill(0x00FF00,0.5);
myCanvas.graphics.drawRect(0,0,100,100);
myCanvas.addChild(new vectorImage());
myCanvas.addChild(new vectorImage2());
var blur:BlurFilter = new BlurFilter();
myCanvas.filters = [blur];

直接绘制的图形和儿童都不会应用模糊效果。我已经尝试更改默认设置并尝试了其他过滤器:

var colors:Array = [0xEDEDED, 0xCCCCCC, 0x211b28, 0x211b28, 0x211b28];
var alphas:Array = [0, 1, .35, .5, 1];
var ratios:Array = [0, 50, 100, 115, 155];              
myCanvas.filters = [new GradientGlowFilter(0, 0, colors, alphas, ratios, 50, 50, 1, 3, "full", false)];

具有相同的效果(也就是说:无)。能起作用的是:

var vi:MovieClip = new vectorImage();
myCanvas.addChild(vi);
vi.filters = [blur];

但是多个过滤器未正确对齐会产生上述问题。

4 个答案:

答案 0 :(得分:3)

在我看来,你有两种可能的方法:

  • 将您希望在其他容器中模糊的内容作为其余容器,并将过滤器应用于该容器。

  • 创建一个舞台大小(或想要模糊的部分)的BitmapData,绘制舞台,applyFilter,将其添加到显示列表(在所有内容之上),并在该添加之上所有不应该模糊的精灵(我想象一个警报框或类似的)。请注意,您应该在调整大小时更新BitmapData。

更新: 你的代码看起来是正确的,但是我不熟悉Flex,所以也许你不能向Canvas添加过滤器(它是一个DisplayObject吗?)...也许将他的cacheAsBitmap设置为false工作(有时它很麻烦)......无论如何,这样的事情应该可以解决问题:

var container=new Sprite();
myCanvas.addChild(container);
container.addChild(new vectorImage());
container.addChild(new vectorImage2());
container.filters=[blur];

或者Canvas已经有了一个容器属性......

干杯...

答案 1 :(得分:1)

//在时间轴代码或文档类

var blur:BitmapFilter = new BlurFilter(5,5,BitmapFilterQuality.HIGH); var allFilters:Array = new Array(); allFilters.push(过滤器); filters = allFilers;

答案 2 :(得分:1)

您应该可以将模糊应用到容器中。 filters属性虽然是一个数组。尝试这样的事情:

var blur:BlurFilter = new BlurFilter();
myCanvas.filters = [blur];

答案 3 :(得分:0)

如果我理解你的问题,将过滤器应用到舞台上将是最简单的事情,不是吗?

格尔茨

back2dos