我需要创建一个由具有透明度的多个PNG组成的图像。我的解决方案在桌面上完美运行,但我想知道我是否可以提高移动设备(iOS)的性能。
我目前的解决方案如下:
首先我使用ImageDecodingPolicy.ON_LOAD
将所有图像加载到内存中,以避免在加载和解码图像时出现任何CPU和延迟。
其次,我将所需的图像加载到Sprite
,而BitmapData
从未添加到显示列表中。
最后,我将所有图像合成为bitmapData.draw(compositionBufferSprite,null,null,null,rect,false);
个对象,并将新合成图像淡化为前一个图像。
draw()
我需要编写整个图像(而不是在舞台上没有任何合成的所有PNG),因为我需要尽可能无缝地从前一个图像过渡到新图像。
我尝试直接使用图像的像素数据等,但是工作所花费的性能和时间与使用drawWithQuality()
完全相同。我还尝试将StageQuality.LOW
与draw()
一起使用,并没有任何区别。我当时得出的结论是,Air已经优化了所有位图工作,如果我BitmapData
或直接从{{1}}撰写,则无关紧要。
我考虑过创建一个ANE(原生扩展),但我不知道是否可以提高性能。到目前为止,似乎ANE仅用于访问本机API而不共享工作负载。
你对我如何改进这个有什么想法吗?
答案 0 :(得分:1)
即使此时的性能差异可以忽略不计,您也应该尝试一个名为 blitting 的流程。
基本上,您将PNG的所有不同帧合并为单个(位图)精灵表,然后通过调用bitmapData.scroll(x, y)
与常规动画片段相比,author of this blog能够显着提高性能并降低内存消耗。
Here is a link to the greensock library which describes the process in further detail.