首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ActionScript 3中优化渲染

在ActionScript 3中优化渲染
EN

Stack Overflow用户
提问于 2009-08-09 07:53:48
回答 3查看 2K关注 0票数 1

我正在做视差动画(类似于- flordearagua.com),它由7-10层相当大(1500x800)的位图和MovieClips组成。为了建立视差,我编写了代码来以不同的速度移动所有的层,这再次取决于一些参数,如鼠标位置和加速度。所有这些都能正常工作。

我想让这个动画变得更流畅。我想要达到最低24 FPS与此。目前,我只能达到15-17FPS与我所做的所有优化。

请注意。我使用的所有组件都是库组件。我为一些图层启用了位图捕捉,但对于一些图层我就是做不到。为一些图层启用位图捕捉会导致在执行视差移动时出现抖动。

请提出任何优化建议。

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2009-08-09 18:36:06

我认为你可以通过在显示列表中保留所有你能的东西来达到更好的性能。只留下一个愚蠢的精灵在上面。手动计算视轴位移,只合成一个位图图像,然后用copyPixels将其绘制到屏幕上,这是非常快的。

当您需要细粒度的用户交互(在某些层的某些区域上单击或滚动)时,这会变得更难管理。尽管如此,您仍然可以捕获鼠标事件并连接到相同的代码,以确定单击的内容和位置。

这里的问题是,在某种程度上,您将重新实现DisplayObject层次结构。这就是问题的症结所在,原生显示对象太通用了,而且对应用程序的细节知之甚少,因此您可以积极地对其进行优化。

您似乎很了解这一点,但就像任何其他优化一样,问题到底出在哪里?(分析它!)

现在的VM相当不错,但是渲染流水线非常慢。你可能会从其他来源得到更多的FPS (内联的东西,memoization等等)。

票数 1
EN

Stack Overflow用户

发布于 2009-08-09 09:54:52

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

因此,拆分图像并将它们添加到DisplayObjectContainer中,然后将它们添加到雪碧图中。并用一组较小的图像替换您的大图像。您应该会在那里看到一些改进。

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

票数 0
EN

Stack Overflow用户

发布于 2009-08-09 18:24:08

我认为这就是你应该做的--尽管我不知道你已经离这有多近了。

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

然而,听起来你已经在做这件事了,或者至少非常接近做这件事。你有没有可以简化的alpha渐变、复杂的pngs或类似的东西?不透明始终比alpha快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1250906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档