Actionscript 3:预渲染类实例以提高性能

Posted

技术标签:

【中文标题】Actionscript 3:预渲染类实例以提高性能【英文标题】:Actionscript 3: Pre rendering instance of class to improve performance 【发布时间】:2018-06-13 16:25:59 【问题描述】:

我有几个类可以创建大量带有事件侦听器的按钮,这些事件侦听器会被创建和定位。我目前重新使用创建后的类实例来改善用户在单击按钮和出现列表之间的时间方面的体验。我希望在用户第一次创建实例时对其进行改进。

所以我现在在应用启动期间创建一个实例并存储以供以后使用。

看起来像这样:

_MenuView = new MenuView();
_MenuView.visible = false;
addChild(_MenuView);
removeChild(_MenuView);
_MenuView.visible = true;

这是一个好方法吗?

【问题讨论】:

基于意见的答案。不,这是完全错误的——但不是你想象的那样。您是否尝试测量创建所有这些按钮需要多长时间?还是第一次/第二次将它们添加到显示列表的影响?如果没有问题(最弱的设备配置没有滞后),尝试解决它可能会对您造成讨厌的把戏,将会出现问题。 我有 3 个类,在一般的 android 设备上创建总共需要 4 秒,在较新的 ios 设备上大约需要 2 秒,在核心 i7 电脑上几乎立即创建。所以我第一次在 Android 上创建的每个类的点击延迟大约为 1.3 秒。 您使用常规的 Flash 内容吗?我的意思是,而不是 Starling 或任何其他 Stage3D 框架。 渲染。使用常规 Flash 内容,您将永远无法获得任何不错的性能。 Flash 使用 CPU 进行渲染(即使您将某些发布选项设置为“GPU”——该选项在某些有限的情况下会有所帮助),而移动设备只是没有这么多的 CPU 能力。考虑将您的项目移植到 Starling - 让 Flash 在移动设备上流畅运行的唯一方法是实际使用其 GPU 来渲染内容。 是的,对于移动设备,所有内容都必须转换为位图。通常,位图在 GPU 上,其他一切都在 CPU 上。这是将常规影片剪辑转换为位图的示例代码:***.com/questions/31775200/… 【参考方案1】:

这对我来说看起来不错。我倾向于使用类似的方法。如果你有一些不变的东西,比如每次出现时看起来都一样的菜单,那么不必一遍又一遍地创建它是有意义的,因为它不会占用太多内存。请注意,确保您多次重新创建的所有内容都被垃圾回收,以免发生内存泄漏。

【讨论】:

以上是关于Actionscript 3:预渲染类实例以提高性能的主要内容,如果未能解决你的问题,请参考以下文章

如何在完全基于精灵的游戏中渲染文本? (动作脚本 3)

Actionscript 3:当元素是对象/类实例时,识别要删除的数组元素

在ActionScript3中创建预加载程序类

ActionScript 3 Lynda.com - AS3 - 使用循环生成类的实例

Actionscript 3 对象相交时意外修改类属性

ActionScript 3 预加载器和进度结构