-1

我有一个具有视网膜分辨率(大约 200 帧)和一些动作脚本的 Flash 影片剪辑。我想使用 stage3d 来提高性能。这是否可能只是将影片剪辑添加到 stage3d 舞台而不会丢失动作脚本?

4

2 回答 2

0

简短的回答:没有。

长答案:不完全是。无论您的输出如何,ActionScript 仍然以相同的方式执行。但是,如果您有想要在 GPU 中呈现的内容,则需要将其与 ActionScript 代码分离。您必须执行相同的影片剪辑,然后将所有帧即时发送到 GPU。这将是一个巨大的资源消耗 - GPU 在渲染事物时很棒,但你必须在那里获取你的数据(你的“纹理”),这需要时间。这种上传到 GPU 的过程很复杂,并且可能是一个真正的瓶颈——当然不是每帧都应该做的事情。在这种情况下,无论如何您仍然需要 draw() 电影,因此最终 blitting 期间的任何性能提升都是没有意义的。

如果您的动画足够小且足够短,您可以将每一帧渲染到与平铺动画相同的单个位图(如精灵表)。然后,您将这个巨大的图像(在大多数情况下最高为 2048x2048,或者在较新的 GPU 中为 4096x4096)上传到硬件,然后通过更改 (UV) 映射坐标来更改“帧”。这是迄今为止在 Flash 中播放动画最快的方法。但如前所述,它要求将所有帧组合成同一张图像(无论是否即时),并上传一次。对于 200 帧,您的动画的尺寸必须为 146x146(或多或少)才能实现,因此它可能很复杂(您需要更多的 spritesheets)。

显然,每帧也可以有一个纹理。加载会有点烦人,但它会起作用。然后,您可以使用Starling 的 MovieClip 之类的东西来播放它。但是话又说回来,您的 ActionScript 会丢失 - 您需要以某种方式将它们重新添加到您的代码中,例如通过不断检查框架。

另一种解决方案可能是将您的动画作为视频并改用 StageVideo。它超级好,更适合复杂的动画内容。

TL;DR:硬件加速在 Flash 中很棒,但根据定义,它只在某些情况下有效。Flash 可以更好地处理某些事情。

于 2013-10-07T22:32:28.110 回答
0

No, you can't just "enable" stage3d and have it work.

Look into Starling framework, that might be the easiest way for you (unless you have text inputs, which will require a bit of a workaround). You'll still have to change a few things in the code, though; it won't be a simple plug and play.

于 2013-10-15T03:54:39.267 回答