[SWF] C:\Users\Administrator\Adobe Flash Builder 4.6\testAS\bin-debug\testAS.swf - 解压缩后为 1,639 个字节
onEnterFrame=32 632
onRender=32 635
onEnterFrame=33 339
onRender=33 341
onEnterFrame=34 339
onRender=34 341
onEnterFrame=35 337
onRender=35 339
onEnterFrame=36 338
onRender=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的跑道模型发生了变化?还是实验设计的不合理?