繁体   English   中英

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

[英]Apply Filter to Everything in AS3

我正在尝试在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];

但由于多个滤镜未正确对齐而产生上述问题。

如我所见,您有两种可能的方法:

  • 将您要模糊处理的所有内容放在其他容器中,然后将滤镜应用于该容器。

  • 创建一个舞台大小(或您要模糊的部分)大小的BitmapData,绘制舞台,applyFilter,将其添加到显示列表中(在所有内容的顶部),并在其顶部添加所有不应包含的sprite模糊(我想是一个警告框或类似框)。 请注意,您应该在调整大小时更新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已经具有容器属性...

干杯...

//在时间轴代码或Document类中

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

您应该能够仅将模糊应用于容器。 虽然filter属性是一个数组。 尝试这样的事情:

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

如果我理解您的问题是对的,那么将滤镜应用于舞台将是最简单的事情,不是吗?

格尔茨

back2dos

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM