(未解决)Enter_Frame和Render事件是发生在一帧的头和尾吗?

来源:互联网 发布:c语言 ~ 编辑:程序博客网 时间:2024/06/03 19:08
[SWF] C:\Users\Administrator\Adobe Flash Builder 4.6\testAS\bin-debug\testAS.swf - 解压缩后为 1,639 个字节onEnterFrame=32 632onRender=32 635onEnterFrame=33 339onRender=33 341onEnterFrame=34 339onRender=34 341onEnterFrame=35 337onRender=35 339onEnterFrame=36 338onRender=36 340

根据FlashPlayer的“可变跑道”之说,Enter_Frame事件发生在一帧开始,而Enter.Render发生在一帧的结束。
关于“可变跑道”,请参考:http://blogs.adobe.com/xwlin/2010/04/flash_player_101_-_adobe_max_2009_1.html

这种说法是在FlashPlayer9的时候提出的,时至今天的FlashPlayer11,还仍然如此吗?
下面的实验尝试验证这一说法,但是结果很奇怪,似乎这两个事件是连续发生的,中间没有间隔。

请看如下实验:

package {        import flash.display.Sprite;        import flash.events.Event;                public class testAS extends Sprite {                private var startW:int = 10;                                public function testAS() {                        //设置帧频为1秒1帧                        this.stage.frameRate = 1;                        //监听ENTER_FRAME和RENDER事件                        this.addEventListener(Event.ENTER_FRAME,onEnterFrame);                        this.addEventListener(Event.RENDER,onRender);                }                                public function onEnterFrame(e:Event):void                {                        //为了触发Event.RENDER事件,而修改画面外观                                                this.graphics.clear();                        this.graphics.lineStyle(1,0x998877);                        this.graphics.drawRect(10,10,startW,20);                        this.stage.invalidate();                        startW += 5;                                                //记录时刻                    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");                                        }        }}

在FlashBuilder中Debug,执行结果如下:
通过onEnterFrame的时间间隔,可以看出,帧频的确是1秒。
按照“可变跑道”之说,onEnterFrame应该发生在一帧的开始,而onRender发生在一帧的结束。在本实验中,两者的时间差应该是1秒左右。
但是实验结果表明,两者的时间差仅为2-4毫秒。

猜测:
难道FlashPlayer的跑道模型发生了变化?还是实验设计的不合理?