导致flash屏幕重绘的几种方式及避免重绘的方法
来源:互联网 发布:zph01单片机驱动程序 编辑:程序博客网 时间:2024/05/17 04:25
导致屏幕重绘的几种原因:
1、最常见的是情况就是舞台上的可视组件在形状、位置、状态(alpha, scale…)发生改变的时候会触发Flash Player 的重绘。2、当一个DisplayObject的层级(ChildIndex)发生改变的时候也会导致重绘。
3、当你将一个Sprite / MovieClip 的buttonMode 设置为 true 的时候,即便是单帧动画,重绘会在MouseEvent.MOUSE_DOWN的时候触发。又或者你对DisplayObject设置层级的时候,即便DisplayObject的层级没有发生改变,也会使得 Flash Player对此显示对象进行重绘。
4、在mouseChild = true的情况下,鼠标移动中从A对象移动到B对象上时,显示列表中已有满足触发渲染条件的变动时会立即触发渲染。
5、所有的键盘事件触发时,显示列表中已有满足触发渲染条件的变动时会立即触发渲染。
6、开启debug模式中的显示重绘区域时,显示列表中已有满足触发渲染条件的变动时会立即触发渲染(这个请无视吧-_-)。
而且后面3个情况都会无视FP可视范围内的BitmapData中已经lock()的对象强制unlock()。
避免重绘的方法:
1、当一个带有动画效果的DisplayObject在不显示的时候,不仅仅是将其 visible 属性设置为 false, 因为重绘依旧会进行,这里你可以选择暂停掉动画,又或者利用removeChild(displayObject) 直接将此对象移除出显示列表。2、不出现在可视范围内外观变化的显示对象其实是不会发生重绘的,这点相信是Flash本身做了优化,也就是说我的Stage.stageWidth 和 Stage.stageHeight 都为200的情况下,一个处在舞台上的变化的显示物体,坐标为(200, 200) 宽高都为10,此时Flash Player重绘内容并不会包括此对象,新版本的Flash Player 甚至在浏览器窗口最小化的时候会关闭掉所有的重绘,这个时候你往往会发现CPU占用率骤降,但是应用程序依旧在运行。
3、在设置DisplayObject的层级的时候请先做一个判断:
if (myContainer.getChildIndex(myChild) != 0){ myContainer.setChildIndex(myChild, 0);}
运气好的话,这个判断最高能带来200%以上的效率提升。
4、当你的Sprite / MovieClip 设置 cacheAsBitmap = true 这个属性的时候,当此显示对象内很小的一个区域(甚至是被遮盖着的物体)发生变化,会导致整个Sprite / MovieClip重绘。
5、尽量确保活动的显示内容在非可见区域被暂停活动或者干脆直接移除出显示列表,这里提到的不可视区域不仅仅是舞台外不可见的,还包括舞台内被其他物体遮盖住的显示对象。
- 导致flash屏幕重绘的几种方式及避免重绘的方法
- 导致flash屏幕重绘的几种方式及避免重绘的方法
- 导致flash屏幕重绘的几种方式及避免重绘的方法
- JS重定向的几种方式
- Android 重启的几种方式
- 数组去重的几种方式
- syncronized重入的几种方式
- 几种开发过程中避免tomcat重启的方法
- 几种开发过程中避免tomcat重启的方法
- JS重定向的几种方法
- 重启网卡的几种方法
- List去重的几种方法
- 数组去重的几种方法
- 数组去重的几种方法
- 数组去重的几种方法
- 数组去重的几种方法
- 安装时避免重起的方法
- 输入法导致ExpandableListView的getChildView重绘
- 判断Android网络是否连接方法
- C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
- 链表的简单实现
- Shape Drawable的学习
- PHP 导出 和写入 Excel文件
- 导致flash屏幕重绘的几种方式及避免重绘的方法
- 文件的字符输入输出流
- 海量数据挖掘--sql语句的执行机制
- MinGW安装和环境变量的配置
- Tomcat升级到6.0遇到的双引号改单引号问题
- [C# 基础知识系列]专题五:当点击按钮时触发Click事件背后发生的事情
- 写个算法“e5a3f2d1”,解压后为"eeeeeaaaffd"
- tslib移植和qt移植
- navicat for mysql 从SQLserver 导数据到Mysql 报错 Incorrect datetime value: ' ' for column '' at