Actionscript 在stage3d中使用flash movieclip

Actionscript 在stage3d中使用flash movieclip,actionscript,movieclip,stage3d,Actionscript,Movieclip,Stage3d,我有一个视网膜分辨率(大约200帧)的flash电影剪辑,里面有一些动作脚本。 我想使用stage3d来提升性能。 这是否可以在不丢失动作脚本的情况下将电影剪辑添加到stage3d阶段?简短回答:否 长回答:不完全是。无论输出如何,ActionScript仍以相同的方式执行。但是,如果您希望在GPU中呈现内容,则需要将其与ActionScript代码解耦。您必须执行相同的movieclip,然后动态地将所有帧发送到GPU。这将是一个巨大的资源消耗——GPU在渲染东西时非常棒,但你必须在那里获取数

我有一个视网膜分辨率(大约200帧)的flash电影剪辑,里面有一些动作脚本。 我想使用stage3d来提升性能。 这是否可以在不丢失动作脚本的情况下将电影剪辑添加到stage3d阶段?

简短回答:否

长回答:不完全是。无论输出如何,ActionScript仍以相同的方式执行。但是,如果您希望在GPU中呈现内容,则需要将其与ActionScript代码解耦。您必须执行相同的movieclip,然后动态地将所有帧发送到GPU。这将是一个巨大的资源消耗——GPU在渲染东西时非常棒,但你必须在那里获取数据(你的“纹理”),这需要时间。这个上传到GPU的过程很复杂,可能是一个真正的瓶颈——当然不是每帧都应该做的事情。在这种情况下,你仍然需要画这部电影,所以在最后的布告中任何性能的提升都是毫无意义的

如果动画足够小且足够短,则可以将每个帧渲染为与平铺动画相同的单个位图(如精灵图纸)。然后,将此海量图像(在大多数情况下高达2048x2048,或在较新的GPU中高达4096x4096)上载到硬件,然后通过更改(UV)贴图坐标来更改“帧”。这是目前在Flash中播放动画的最快方式。但正如前面所述,它要求所有帧都合成到同一个图像中(无论是否动态),并上传一次。对于200帧,动画的尺寸必须为146x146(或多或少),这样才能实现,因此可能会比较复杂(您需要更多的精灵表)

很明显,每个帧也可以有一个纹理。这会有点烦人的加载,但它会工作。然后你可以用一些东西让它玩。但是你的动作脚本又会丢失——你需要以某种方式将它们重新添加到你的代码中,比如不断地检查框架

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

TL;DR:闪存中的硬件加速非常好,但根据定义,它只在某些情况下有效。有些事情用Flash处理得更好。

不,你不能只是“启用”stage3d并让它工作


看看Starling框架,这可能是最简单的方法(除非您有文本输入,这需要一些变通方法)。不过,您仍然需要更改代码中的一些内容;它不是简单的即插即用。

您有代码吗?这是一个编程问答。请参阅: