AS3.0 效率优化

摘要:
3.位图过滤效果的本质:在内存中过滤后添加一个新的效果图像,然后显示此效果图像,但原始图像仍占用内存。通常不需要超过每秒30帧。
1.显示对象:1.1.静态的不需互动的图形,使用Shape对象。(eg:getSize(newShape())=236)
1.2.不需要时间轴的互动图形,使用Sprite对象。(eg:getSize(newSprite())=412)
1.3.需要使用时间轴的动画,使用MovieClip对象。(eg:getSize(newMovieClip())=440)
 
2.触发垃圾回收的方法:varcleanup:Shape=newShape;...cleanup=null;...cleanup=null;...cleanup=null;......
当系统认为内存使用不算多的情况下,运行时不会主动触发垃圾回收(对象删除,不一定会触发垃圾回收),这样就导致内存的释放在时间上是不可预知的;但内存分配却可以触发垃圾回收。当垃圾回收器被触发后,垃圾回收器将在程序里查找未收集的可视化对象,并检查已查找到的所有未收集的可视化对象里的各个对象的引用情况,进而检测出未被引用的非活动对象,之后会主动删除这部分非活动对象。
 
PS:
2.1.System.gc()可强制使用垃圾回收器回收非活动对象,但同时也停止除了SOCKET以外的所有操作。
2.2.image.Dispose();image=null;//立即释放。
2.3.System.disposeXML()可立即释放XML对象。
 
3.位图的滤镜效果本质:在内存中新增加一个进行滤镜后的效果图,然后将这张效果图显示出去,但原位图仍占用内存。因此,能使用PS等工具直接制作成效果图并加载,可省下这份内存,并减少在加载滤镜时的内存与CPU或GPU的占用。
 
PS:flashplayer10.1版本新增加了自动释放未过滤或未呈现到界面(如隐藏或放置到界面以外的区域)的原始位图功能(动态位图回收),需要不使用原位图30秒。但当要再次使用到原位图时,则需要重新加载。
 
4.尽可能地将显示对象的鼠标事件给关闭掉,尽可能地关闭事件的冒泡传递。
 
5.removeChild()并不能停止显示对象或回收显示对象(仅不显示而已),应尽可能地冻结显示对象。
 
6.vector比array的速度要快,同时固定了vector或Array的长度,则会更节省内存以及省时间。
Ps:不定长的vector或Array的对象,在每次变更其长度,均会在内存中重新复制原来的vector或array对象,然后再将原来的变量指向于新生产的clone对象。这会产生新的内存分配以及数据拷贝。另外,尽可能地使用原API会相对比较快与省内存。
 
7.当需要遍历array或vector时,尽可能使用COPY法,即item=vector;item.dosomework();....
PS:减少内联代码以减少内联函数的调用次数。内联的含义是只调用到对象内部的对象,比如vector.length,Math.PI等,应直接设置为外部变量。
 
8.尽可能地少使用alpha(alpha混合):因为占用CPU,特别是在叠加图层里,需要计算叠加后的颜色,则会占用CPU以及内存。
 
9.当非动画性界面时,可适当降低帧速率,但如需要保持流连接,不要小于4FPT。
PS:修改帧速率:Stage.frameRate/WindowedApplication.frameRate,但注意并不意味着应用会一直保持这个帧速率。
 
以下是一些常规指导,用于开始确定适用于不同类型活动的合适帧速率:
9.1.如果使用的是Flex框架,将起始帧速率保持为默认值(spark.components.WindowedApplication类会自动将backgroundFrameRate调整到至少为1帧/秒);
9.2.播放动画时,将帧速率设置为至少20帧/秒。通常不必超过30帧/秒。
9.3.不播放动画时,12帧/秒的帧速率可能就足够了。
9.4.系统以本机帧速率播放加载的视频,而与应用程序帧速率无关。如果视频是应用程序中唯一的移动内容,12帧/秒的帧速率。
可能就足够了。
9.5.如果应用程序没有输入焦点,5帧/秒的帧速率可能就足够了。
9.6.当AIR应用程序不可见时,2帧/秒或更低的帧速率可能就足够了。例如,如果应用程序已最小化或本机窗口的visible属性。
为false,则应用此指导。
 
10.播放影片或动画时,不要打开位图缓存。
10.1.对容器激活位图缓存会导致最终位图占用更多内存。
10.2.不在各个帧上旋转、缩放或更改缓存的内容,则位图缓存可提高呈现效果。但是,对于X和Y轴上的平移之外的任何转换,则不会提高呈现性能。在这些情况下,每次在显示对象上发生转换时,FlashPlayer都将更新缓存的位图副本。
10.3.更改alpha值会强制FlashPlayer在修改alpha值时更新内存中的缓存位图。
10.4.滤镜效果下,修改(x,y),则会重新生产位图(位图缓存种计算):滤镜依赖每次缓存的影片剪辑的播放头移动时更新的位图,每个帧都会强制FlashPlayer重绘位图。
10.5.位图的缩放,平移,旋转,使用bitmapdata的matrix会节省大量内存与CPU的占用。
10.6.在将矢量绘制为位图前后切换舞台品质是一项功能强大的技术,可以在屏幕上获得消除锯齿的内容。无论最终舞台品质如何,此技术都有效。EG:可通过使用消除锯齿文本,甚至通过将舞台品质设置为LOW来获取消除锯齿的位图。使用cacheAsBitmap属性时不能实现此技术。不建议对处于运动状态的文本应用此选项(可读性消除锯齿)。
PS:stage.quality=StageQuality.BEST;加载位图;stage.quality=StageQuality.LOW;
10.7.可将平移类的动画设置到一个函数中,减少平移动画时对函数的调用次数。如Event.ENTER_FRAME事件里

免责声明:文章转载自《AS3.0 效率优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TAB页制作Android 输入框弹出样式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python中bitmap的参数

Tkinter Bitmaps: 你会使用这个属性显示一个位图。有以下类型的可用位图. 你会使用这个属性显示一个位图。有以下类型的可用位图.: "error" "gray75" "gray50" "gray25" "gray12" "hourglass" "info" "questhead" "question" "warning"...

wxpython 基本的控件 (按钮)

使用按钮工作 在wxPython 中有很多不同类型的按钮。这一节,我们将讨论文本按钮、位图按钮、开关按钮(toggle buttons )和通用(generic )按钮。   如何生成一个按钮? 在第一部分(part 1)中,我们已经说明了几个按钮的例子,所以这里我们只简短的涉及它的一些基本的东西。图7.4显示了一个简单的按钮。   图7.4 使用按钮...

全方位掌握nsis脚本

NSIS 确实是一个不错的安装程序制作软件。新版本 2.0a7 真正实现了中文支持和支持 WinXP 的安装对话框。 不过要用它实现漂亮的安装界面和完美的安装功能就必须好好的写脚本。 而 NSIS 的脚本指令是在是太多了,有时候觉得好像又回到了学习 C 语言的年代。他丰富而起强大的功能甚至 可以编译出一些小而使用的软件(例如查找窗口句柄,然后...) 好了...

c#数字图像处理(一)Bitmap类、 Bitmapdata类和 Graphics类

Bitmap类、 Bitmapdata类和 Graphics类是C#图像处理中最重要的3个类,如果要用C#进行图像处理,就一定要掌握它们。 1.1 Bitmap类Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成。 因此 Bitmap是用于处理由像素数据定义的图像的对象。 Bitmap类类的主要方法和属性如下: Get Pi...

Altium中Logo的导入方法及大小调整

Altium中Logo的导入方法及大小调整 LOGO识别性是企业标志的重要功能之一,特点鲜明、容易辨认,很多客户需要在PCB设计阶段导入LOGO标示归属特性。如果LOGO是CAD图纸,可以直接按照前面DXF导入方法进行导入,如果LOGO是图片文档,我们可以按照如下操作进行导入。 1、位图的转换,利用Windows画图工具,把图片转换成单色的BMP位图...

Android菜鸟成长记15 -- BitMap

BitMap简介 Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能。 BitMap的常用属性 1. BitMap类public void recycle()——回收位图占用的内存空间,把位图标记为Dea...