在ActionScript 3中优化渲染

时间:2009-08-09 07:53:48

标签: actionscript-3 optimization

我正在研究视差动画(类似于 - flordearagua.com),它包含7-10层相当大的(1500x800)位图和MovieClip。为了实现视差,我编写了代码以不同的速度移动所有图层,这又取决于一些参数,如鼠标位置和加速度。一切正常。

我想让这个动画更加流畅。我想用这个达到最低24 FPS。目前,我已经完成所有优化,只能达到15-17 FPS。

请注意。我正在使用的所有组件都是Library Component。我启用了某些图层的位图捕获,但对于某些我不能。对某些图层启用位图捕获会导致执行视差移动时的急动。

请建议任何优化。

感谢。

3 个答案:

答案 0 :(得分:1)

我认为您可以通过保留显示列表关闭的所有内容来获得更好的性能。只留下一个愚蠢的精灵。手动计算paralax位移,只编写一个位图图像,然后用copyPixels将其绘制到屏幕上,这非常快。

当您需要进行细粒度的用户交互(某些图层的某些区域上的点击或翻转)时,这会变得更难管理。仍然如此,您可以捕获鼠标事件并挂钩到相同的代码,以确定点击的内容和位置。

这里的问题是,在某种程度上,您将重新实现DisplayObject层次结构。这就是它的关键,本机显示对象过于通用,对应用程序的细节知之甚少,因此您可以积极地对其进行优化。

您似乎对此了如指掌,但就像其他任何优化一样,问题究竟在哪里? (简介!)

这些天的VM非常好,但渲染管道非常慢。您可能会从其他来源获得更多FPS(内联,记忆等)。

答案 1 :(得分:0)

将大图像分割成较小的图像应该使flash播放器能够执行测试,以查看每个图像是否在舞台的视口区域内,而不是渲染它。

因此,将图像分割并将它们添加到DisplayObjectContainer,然后将它们添加到Sprite中。并用一组较小的图像替换您的大图像。你应该看到一些改进。

如果这不起作用,您可以尝试手动执行可见性测试,使不在视口中的图像可见= false。

答案 2 :(得分:0)

我认为这是你应该做的事情 - 但我不知道你已经接近这个了。

  • 将所有大图层保留在显示列表中。
  • 在每个框架上,计算每个图层的哪个部分应该可见。
  • 抓取每个图层当前可见部分的bitmapData对象。
  • 按顺序将它们按顺序绘制到显示列表中的空显示对象上。

但是,听起来你已经这样做了,或者至少非常接近这样做。你有简化的alpha渐变,复杂的png等吗?不透明总是比alpha快。