Actionscript模糊/阴影/发光处理器有多重?

时间:2010-05-22 13:24:19

标签: flash actionscript-3 actionscript

我在特定空间中说了10个项目,如果我对所有这些项目应用发光和阴影,并且所有这些项目通常都是静态的。其他角色也会在它们周围移动。所以我只是想知道使用带有动作模糊和发光的矢量是明智的。或者有一个PNG?如果我不能拥有PNG并且必须使用具有发光/模糊/阴影的矢量。它们在处理器上是否会过重?

2 个答案:

答案 0 :(得分:1)

将位图滤镜(发光,阴影等)应用于任何内容时,Flash会自动启用名为“位图缓存”的功能。只要该功能处于启用状态,Flash就会将对象渲染为位图,然后将使用该位图代替对象,直到它确定需要重新渲染对象为止。只要对象的内部(即子项)以任何方式发生变化,或者除了简单的翻译(x / y的变化)之外,对象本身都会经历任何类型的变换,Flash将重新渲染对象。

这意味着:

  1. 如果您的对象在内部没有变化,并且它没有旋转或改变比例,那么一旦应用过滤器,对象是否包含位图或向量无关紧要。内部Flash已将其缓存到位图,因此无论内部是什么,它都会表现得非常好。
  2. 如果对象在内部更改,或者旋转或缩放,则即使应用了滤镜,Flash也会每帧重新渲染对象。在这种情况下,在对象内部使用位图将比使用复杂向量(包括非设备文本)更好。
  3. 如果可能的话,最好将过滤器应用于不需要经常重新渲染的子对象,而不是将它们应用于父对象。

答案 1 :(得分:0)

很多PNG带有效果(即模糊,发光,阴影等),它们几乎总能胜过很多矢量对象,并通过代码应用相同的效果。如果你不能使用PNG那么你可以随时利用一个小技巧... BitmapData.applyFilter()!这种方法非常棒,而且在您描述的相同情况下,我设法发现了显着的性能提升。我不会使用矢量图形,而是采用矢量对象的位图快照,如下所示:

var vectorGraphic:MovieClip = someVectorObectThatNeedsFiltersAppliedToIt;
var bmd:BitmapData = new BitmapData(vectorGraphic.width, vectorGraphic.height, true, 0x000000);
var glow:GlowFilter = new GlowFilter(0x00ffff, 1, 4, 4, 2, 1, false, false);
bmd.draw(vectorGraphic, null, null, null, null, true);
bmd.applyFilter(bmd, new Rectangle(0, 0, bmd.width, bmd.height), new Point(0, 0), glow);
var bmp:Bitmap = new Bitmap(bmd, 'never', true);
祝你好运!