使用带有 stage3d 的 Flash 影片剪辑
Posted
技术标签:
【中文标题】使用带有 stage3d 的 Flash 影片剪辑【英文标题】:Using flash movieclip with stage3d 【发布时间】:2013-10-14 08:21:01 【问题描述】:我有一个具有视网膜分辨率(大约 200 帧)和一些动作脚本的 Flash 影片剪辑。 我想使用 stage3d 来提高性能。 这是否可能只是将影片剪辑添加到 stage3d 舞台而不会丢失动作脚本?
【问题讨论】:
你有代码吗?这是一个编程问答。见:***.com/help/on-topic 【参考方案1】:不,您不能只是“启用”stage3d 并让它工作。
查看 Starling 框架,这对您来说可能是最简单的方法(除非您有文本输入,这需要一些解决方法)。不过,您仍然需要更改代码中的一些内容;它不会是简单的即插即用。
【讨论】:
【参考方案2】:简短回答:不。
长答案:不完全是。无论您的输出如何,ActionScript 仍然以相同的方式执行。但是,如果您有想要在 GPU 中呈现的内容,则需要将其与 ActionScript 代码分离。您必须执行相同的影片剪辑,然后将所有帧即时发送到 GPU。这将是一个巨大的资源消耗 - GPU 在渲染 事物时非常棒,但是你必须在那里获取你的数据(你的“纹理”),这需要时间。这种上传到 GPU 的过程很复杂,并且可能是一个真正的瓶颈——当然不是每帧都应该做的事情。而且在这种情况下,无论如何您仍然需要 draw() 电影,因此最终 blitting 期间的任何性能提升都是没有意义的。
如果您的动画足够小且足够短,您可以将每一帧渲染到与平铺动画相同的单个位图(如精灵表)。然后,您将这个巨大的图像(在大多数情况下最高为 2048x2048,或者在较新的 GPU 中为 4096x4096)上传到硬件,然后通过更改 (UV) 映射坐标来更改“帧”。这是迄今为止在 Flash 中播放动画最快的方法。但如前所述,它要求将所有帧组合成同一张图像(无论是否即时),并上传一次。对于 200 帧,您的动画尺寸必须为 146x146(或多或少)才能实现,因此它可能很复杂(您需要更多 spritesheets)。
您显然也可以每帧有一个纹理。加载会有点烦人,但它会起作用。然后,您可以使用 Starling's MovieClip 之类的东西来播放它。但话又说回来,您的 ActionScript 会丢失 - 您需要以某种方式将它们重新添加到您的代码中,例如通过不断检查框架。
另一种解决方案可能是将您的动画作为视频并改用 StageVideo。它非常适合制作复杂的动画内容。
TL;DR:硬件加速在 Flash 中很棒,但根据定义,它只在某些情况下有效。 Flash 可以更好地处理某些事情。
【讨论】:
以上是关于使用带有 stage3d 的 Flash 影片剪辑的主要内容,如果未能解决你的问题,请参考以下文章