0

我需要创建一个由多个具有透明度的 PNG 组成的图像。我的解决方案在桌面上运行良好,但我想知道我是否可以提高移动设备 (iOS) 的性能。

我目前的解决方案如下:

首先,我将所有图像加载到内存中ImageDecodingPolicy.ON_LOAD,以避免在加载和解码图像时出现任何 CPU 和延迟。

其次,我将所需的图像加载到Sprite从未添加到显示列表中的图像中。

最后,我将所有图像组合成一个BitmapData对象,并将新组合的图像淡入前一个图像。

bitmapData.draw(compositionBufferSprite,null,null,null,rect,false);

我需要合成整个图像(而不是在舞台上没有任何合成的所有 PNG),因为我需要尽可能无缝地从前一个图像过渡到新图像。

我尝试直接使用图像的像素数据等,但是在工作上花费的性能和时间与使用draw(). 我也尝试使用drawWithQuality()withStageQuality.LOW并没有任何区别。我当时的结论是,Air 已经优化了所有位图工作,我draw()还是直接从BitmapData.

我曾考虑过创建一个 ANE(本机扩展),但我不知道这是否会带来更高的性能。到目前为止,ANE 似乎只用于访问本机 API,而不是分担工作负载。

您对我如何改进这一点有任何想法吗?

4

1 回答 1

1

即使此时性能差异可以忽略不计,您也应该尝试一个称为blitting的过程。

本质上,您将 PNG 的所有不同帧合并到一个(位图)精灵表中,然后通过调用移动位图数据以更改帧bitmapData.scroll(x, y)

与常规影片剪辑相比,此博客的作者能够显着提高性能并减少内存消耗。

这是 greensock 库的链接,它更详细地描述了该过程。

于 2013-10-28T01:25:00.750 回答