• 【设为首页】
  • 【收藏闪客居】
当前位置:主页>FLASH AS 编程>AS基础篇>AS 3.0>文章内容
  • render事件来提高程序的运行效率(as3.0)
  • 来源:webstudio.com.cn 作者:harryxu 2007-12-02 【


AS3中的DisplayObject有一个render事件,他会在重绘DisplayList之前触发,这给我们提供了在重绘之前最后一次操作的机会。

每次需要DisplayObject触发render事时,都要调用一次 stage.invalidate();

下面用一个小例子来说明一下具体用法把。


假设我们现在要写一个list组件,该组件有addItem()方法用于添加list项目,和remvoeItem() 方法用于删除list项目,当然还可能有addItemAt(),removeItemAt()等方法,这些方法调用后,都需要对list内的显示对象进行重新排列。


我们先实现一个List类,用于显示列表项目
List类中,有addItem() 和 removeItem() 这两个方法提供给外部调用,用于添加和删除list项目,这两个方法中除了将列表项目添加/删除,还要调用一个方法来重新对list中的项目进行排列,layoutContents()。

关键就是,这个layoutContents()的调用,他的调用次数越少,那效率当然就越高啦,如果是常规的做法,就是类似这样:
代码:
public function addItem(item:DisplayObject):void { addChild(item); layoutContents(); }

将item加入后,重新排列列表

下面是List类的源代码:
代码:
package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; public class List extends Sprite { public function addItem(item:DisplayObject):void { addChild(item); layoutContents(); } public function removeItem(item:DisplayObject):void { if(contains(item)) { removeChild(item); layoutContents(); } } //对内部项目进行排列,可以是任意的排列算法 protected function layoutcontents():void { trace("do layout"); var y:Number = 0; var num:int = numChildren; for(var i:int=0; i<num; i++) { var child:DisplayObject = getChildAt(i); child.x = 0; child.y = y; y += child.height+2; } } }

这个程序粗看似乎没什么问题,但却存在一个效率问题
如果只调用一次addItem,没问题,如果调用10次呢? 前9次的layoutcontents()都不是必须的,只有第十次才是真正需要的这样程序的效率就降低了。
我们可以试一下

先需要一个简单的ListItem
代码:
package { import flash.display.Shape; public class ListItem extends Shape { public function ListItem() { super(); graphics.beginFill(0xFF6600); graphics.drawRect(0, 0, 30, 16); graphics.endFill(); } } }


然后测试
代码:
package { import flash.display.Sprite; public class ListTest extends Sprite { public function ListTest() { var list:List = new List(); addChild(list); list.addItem(new ListItem()); list.addItem(new ListItem()); list.addItem(new ListItem()); } } }


我们可以看到,输出了3次 do layout 说明layoutcontents执行了3次,前两次都是多余的。


上一页12 下一页

上一篇:AS3.0的Socket通讯发送固定字符串(指定编码)   下一篇:使用As3.0的50个理由
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)