Flex:如何压平加载的swf然后应用alpha,而不是应用alpha然后展平

时间:2011-04-14 16:51:52

标签: flex actionscript-3 flash alpha

我有一个flex应用程序,我试图在谷歌地图上显示一些动画矢量形状。为此,我加载了一个外部SWF(内容是动态的,因此我必须在运行时加载,SWF是支持动画AFAIK的唯一可加载格式)并使用叠加将其放置在地图上。

然后我需要控制SWF的alpha。设置它很简单,但由于某种原因,alpha似乎应用于SWF内的子形状,并且仅在此之后是合成到地图上的图像。这使得绿色斑点顶部的黄色斑点呈现黄绿色而不仅仅是黄色。

我需要以某种方式告诉flex / flash“渲染/展平SWF,然后应用alpha”,而不是“将alpha应用于各个子形状,然后展平到地图”。理想情况下,不经过例如一个BitmapData对象或类似对象。

包含层次结构是Map - > BlobManager - >装载机 - > Loader.content(SWF),我尝试将alpha分别应用于BlobManager,Loader和Loader.content,但没有区别。我已经在较低层上尝试了cacheAsBitmap,然后将alpha更高的应用程序无效。

有关下一步尝试的建议吗?谢谢!

2 个答案:

答案 0 :(得分:1)

如果没有在Bitmap上绘制加载的内容并使用它来显示alpha,我认为你不能这样做。 这很容易,但如果加载的内容来自另一个域并且不允许您从中创建bitmapData,则可能会遇到安全违规。

// content is the loaded external swf, or the Loader itself?
var bitmapData:BitmapData = new BitmapData(content.width, content.height);
bitmapData.draw(content);
var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.alpha = .5;
addChild(bitmap);

甚至可能没有必要显示加载的内容(虽然我没有尝试过),你也可以只使用一部分将其用作使用矩阵的bitmapData。

编辑:对于动画,另一种选择是加载动画gif,如下所述:http://www.bytearray.org/?p=95(我没有经验,所以我不能说它是否真的适合你),或使用视频。

答案 1 :(得分:1)

尝试BlendMode.LAYER,它挽救了许多生命。