导致flash屏幕重绘的几种方式及避免重绘的方法
2013-07-03 09:27
344 查看
导致屏幕重绘的几种原因:
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屏幕重绘的几种方式及避免重绘的方法
- 让Flash自适应浏览器屏幕大小的几种方法
- jsp取得绝对路径的方法(避免请求转发的方式导致路径错误)
- Flash 10 插件在Firefox运行导致屏幕闪烁的解决方法
- 让Flash自适应浏览器屏幕大小的几种方法
- flash制作过程中避免占用CPU资源过度的几种方法
- mysql忽略主键冲突,避免重复插入的几种方式
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
- JAVA高级【10.2】《Java核心技术2》本地方法-几种java调用dll的方式
- 数据绑定以及Container.DataItem几种方式与使用方法分析
- Android创建桌面快捷方式几种方法
- JavaScript定义类,定义属性,定义方法的几种方式详解与分析
- 谈谈移动端屏幕适配的几种方法
- 基于$.ajax()方法从服务器获取json数据的几种方式总结
- 屏幕居中(DIV/CSS) 的几种方法(转)
- 有哪几种方式获得Class类对象(实例)的方法?和对反射的理解和作用?
- perl 访问类方法的几种方式
- HTTP 和 SCOKET 通信的区别? TCP,UDP 的连接方法?HTTP 几种常用方式