stage.invalidate()、event.updateAfterEvent()对渲染的影响
2012-12-03 20:48
411 查看
键盘、鼠标、定时器的事件的方法updateAfterEvent会让Flashplayer立即更新屏幕,但是不会发生Event.RENDER事件。
stage.invalidate()不会让Flashplayer立即更新屏幕,但是会促使Flashplayer发出Event.RENDER事件。
updateAfterEvent和stage.invalidate的结合会让促使Flashplayer发出Event.RENDER事件,同时立即更新屏幕。
*下面实验结果验证了这些事实的同时还说明了一些事情:
1. 定时器并非如设想的那样等时间间隔发生。
2.updateAfterEvent不会促使所在帧提前结束,也就是说它对帧频没有影响(这个结果证明了网间说法是错误的)。
下例中,在onTime函数中,注释掉了stage.invalidate()。你会发现onRender函数没有被触发。
也就是说尽管updateAfterEvent使得立即更新屏幕,但是RENDER事件没有发生。如果在onRender函数中定义了内容,该内容被忽略。
结果:
再释放stage.invalidate()。重新执行,你会发现onRender函数被触发。
675onTime=18 739onRender=18 741
stage.invalidate()不会让Flashplayer立即更新屏幕,但是会促使Flashplayer发出Event.RENDER事件。
updateAfterEvent和stage.invalidate的结合会让促使Flashplayer发出Event.RENDER事件,同时立即更新屏幕。
*下面实验结果验证了这些事实的同时还说明了一些事情:
1. 定时器并非如设想的那样等时间间隔发生。
2.updateAfterEvent不会促使所在帧提前结束,也就是说它对帧频没有影响(这个结果证明了网间说法是错误的)。
下例中,在onTime函数中,注释掉了stage.invalidate()。你会发现onRender函数没有被触发。
也就是说尽管updateAfterEvent使得立即更新屏幕,但是RENDER事件没有发生。如果在onRender函数中定义了内容,该内容被忽略。
package { import flash.display.Sprite; import flash.events.Event; import flash.events.TimerEvent; import flash.utils.Timer; public class testAS extends Sprite { private var startW:int = 10; private var time:Timer = new Timer(300); public function testAS() { //设置帧频为1秒1帧 this.stage.frameRate = 1; //监听ENTER_FRAME和RENDER事件 this.addEventListener(Event.ENTER_FRAME,onEnterFrame); this.addEventListener(Event.RENDER,onRender); //设定定时器,时间间隔小于1秒 time.addEventListener(TimerEvent.TIMER, onTime); time.start(); } public function onEnterFrame(e:Event):void { //记录时刻 var now:Date = new Date(); trace("onEnterFrame=" + now.seconds + " " + now.milliseconds); } public function onRender(e:Event):void { //记录时刻 var now:Date = new Date(); trace("onRender=" + now.seconds + " " + now.milliseconds + "\n"); } public function onTime(e:TimerEvent):void { //记录时刻 var now:Date = new Date(); trace("onTime=" + now.seconds + " " + now.milliseconds + "\n"); //为了触发Event.RENDER事件,而修改画面外观 this.graphics.clear(); this.graphics.lineStyle(1,0x998877); this.graphics.drawRect(10,10,startW,20); //this.stage.invalidate(); startW += 5; e.updateAfterEvent(); } } }
结果:
[SWF] C:\Users\Administrator\Adobe Flash Builder 4.6\testAS\bin-debug\testAS.swf - 解压缩后为 1,875 个字节 onTime=45 64 onTime=45 140 onEnterFrame=45 489 //证明了帧频的确为1 onTime=45 673 onTime=46 207 //证明了尽管调用了event.updateAfterEvent(),并且从屏幕上看到了预期的变化,但是onRender函数并没有执行(RENDER事件没有发生) onEnterFrame=46 474 onTime=46 740 onTime=47 273 onEnterFrame=47 476 onTime=47 807 onTime=48 410 onEnterFrame=48 476 onTime=48 874 onTime=49 407 onEnterFrame=49 474 onTime=49 940 //证明了定时器并非等时间间隔触发 onEnterFrame=50 476 onTime=50 477 onTime=51 6
再释放stage.invalidate()。重新执行,你会发现onRender函数被触发。
[SWF] C:\Users\Administrator\Adobe Flash Builder 4.6\testAS\bin-debug\testAS.swf - 解压缩后为 1,898 个字节 onTime=14 257 onRender=14 261 onTime=14 472 onRender=14 474 onEnterFrame=14 678 //证明了帧频仍然为1,并没有受到stage.invalidate()、event.updateAfterEvent()的影响。 onTime=15 5 onRender=15 7 //证明了stage.invalidate()、event.updateAfterEvent()的共同作用下,onRender函数被执行了(RENDER事件发生了)。 //且RENDER事件的发生并没有使该帧提前结束。onTime=15 539onRender=15 540onEnterFrame=15 689onTime=16 73onRender=16 75onTime=16 606onRender=16 607onEnterFrame=16 683onTime=17 139onRender=17 140onEnterFrame=17 674onTime=17 675onRender=17 677onTime=18 206onRender=18 208onEnterFrame=18
675onTime=18 739onRender=18 741
相关文章推荐
- Mouse e.updateAfterEvent 函数
- updateAfterEvent
- (转)as3 updateAfterEvent的作用
- as3 updateAfterEvent的作用
- as3 updateAfterEvent的作用
- UpdateAfterEvent
- 一些动画效果用使用 updateAfterEvent
- as3 updateAfterEvent的作用
- as3 updateAfterEvent的作用
- updateAfterEvent的用处
- setInterval()/clearInterval()/updateAfterEvent()
- 关于事件Event.Removed和Event.Removed_from_stage的区别
- tcl/tk实例详解——after、update和vwait
- java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
- "Virtual PC Could Not Open Its Emulated Ethernet Switch Driver" Error Message After You Install a Virtual PC Update
- XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem J. Terminal
- but when call at some dlg,only no echo,but after add a Invalidate() ,it will be ok very strange.
- mysql 行锁小技巧 索引对行锁的影响 批量update的时候容易出现死锁
- EasyUI tabs update 方法后控件无法渲染问题处理
- Event.ADDED和Event.ADDED_TO_STAGE的区别