我正在尝试在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];
但是多个过滤器未正确对齐会产生上述问题。
答案 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