【问题标题】:Flex: how to flatten loaded swf and then apply alpha, rather than applying alpha and then flatteningFlex:如何展平加载的 swf 然后应用 alpha,而不是应用 alpha 然后展平
【发布时间】:2026-02-16 04:45:02
【问题描述】:

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

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

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

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

对于接下来要尝试什么有什么建议吗?谢谢!

【问题讨论】:

    标签: apache-flex actionscript-3 flash alpha


    【解决方案1】:

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

    【讨论】:

    • Thx @alxx,如果可行,请忽略我的回答 :) 而且我也学到了一些新东西。
    【解决方案2】:

    如果不在位图上绘制加载的内容并使用它以 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(我没有这方面的经验,所以我不能说它是否真的适合你),或者使用视频。

    【讨论】:

    • 据我所知,主要问题是加载的内容是动画:(
    最近更新 更多