您的位置:首页 > 其它

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

2012-12-03 18:25 357 查看
[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的跑道模型发生了变化?还是实验设计的不合理?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: