我正在制作一个项目(在Flash CS5中) - 我使用midi文件可视化音乐 - 这意味着我在舞台上有很多简单的动画片段(矩形),它们有不同的z-index,不透明度,高度,宽度,模糊等...
事情是 - 它渲染太慢了!当闪光灯难以渲染时,我可以看到帧速率从30 F / S变为10甚至5 F / S.现在,我的动画并不复杂 - 我在网上或游戏中看到了令人惊奇的东西 - 我只是尝试移动简单的形状。
因为我不知道该怎么做 - 我的问题是,如果有办法:
以某种方式使用计算机图形硬件?使用openGL引擎?我有这个想法,如果我将它连接到一个强大的引擎,它会工作吗?
有没有办法逐帧录制?我没有必要实时看到它(虽然它会很好) - 我可以妥协制作它是一个.mov文件。但我发现将它作为电影导出无济于事(它将其记录为实时播放)。我尝试了“手动”降低每个动画片段速度的方法 - 但由于一切都变慢了......屏幕现在有更多的动画片段要渲染,而且变得更慢。
有人能想到解决方案吗?难道我做错了什么? (我真的不认为我渲染的东西如此复杂,因为它太慢了)
答案 0 :(得分:2)
您可以通过闪存插件的标志使用硬件加速: http://www.adobe.com/devnet/flashplayer/articles/fplayer10_1_hardware_acceleration.html 但是,它并不适用于所有平台,它几乎只有windows :( 此外,您将获得的性能提升(如果有的话)根据动画的组成而变化很大。
逐帧记录这些东西是可行的,但很烦人。您可以使用PNGEncoder或JPEGEncoder类并将它们写入文件。 http://blog.everythingflex.com/2008/10/01/filereferencesave-in-flash-player-10/ 如果将其放在onEnterFrame的处理程序中,则每次都会将帧保存到硬盘驱动器中。然后,您可以使用mencoder等标准工具从图像中创建电影。
现在我的建议是,尝试描绘你的SWF,并找出什么是如此缓慢。有可能它不是渲染而是你的代码。如果它真的是渲染,试着找出它为什么这么慢 - 就像你在为每一帧改变数千个支持alpha的电影剪辑而烦恼。 Flash播放器非常聪明,它可以缓存什么,但你必须给它一个机会。如果你的场景并不复杂而且速度仍然很慢,那么它总是意味着你做错了什么。尝试不使用alpha,使用绘图方法而不是使用数百个影片剪辑。
答案 1 :(得分:1)
您提到了模糊。这会显着减慢动画速度。几乎所有过滤器都不是需要动画的对象的推荐伴侣 - 至少不会同时使用多个过滤器。如果您要这样做,那么至少将BlurFilter
应用于容器而不是单个孩子。
还有其他明显更好的方法可以将过滤器应用于多个对象,例如将元素绘制到BitmapData
并使用BitmapData.applyFilter()
删除所有过滤器,看看是否有帮助。如果没有,请提供更多代码/信息,我会看一下:)