Flex程序是由两帧构成,第一帧用于加载程序和相关RSL等,第二帧才会执行swf。
进入第二帧后,FlashPlayer仍然按照指定的“帧频(时间间隔)”不断重新播放第二帧。这是FlashPlayer运行特点。
Flex组件框架也是借由这个运行特点(机制)监听“进入帧(ENTER_FRAME)”事件,然后更新各种属性、尺寸、重新绘制外观的。
(Flex程序本质上和Flash程序一样,也是影片剪辑。也会被FlashPlayer循环播放)
?
下面的例子可以测试帧频,同时也可以证明:
1. Flex程序在指定的“帧频”下,不断被重新播放。
2. 这个时间间隔不是绝对的相等,而是“差不多”的“等间隔”。
关键词:
frameRate:帧频。下例中的帧频被指定为1,也就是每隔1秒钟中重放第二帧
ENTER_FRAME:进入帧后,由FlashPlaer发出的帧事件
?
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"?
????? xmlns:s="library://ns.adobe.com/flex/spark"?
????? xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"?
??????frameRate="1"
????? creationComplete="init()"
????? >
?<fx:Script>
??<![CDATA[
???var temp:int = 0;
???
???public function init():void{
????//对帧重放进行监听
????this.addEventListener(Event.ENTER_FRAME,enterFrame);
????//txt.text = this.stage.frameRate+"rn";
???}
???
???public function enterFrame(e:Event):void{
????//在画面上记录进入帧的时间
????txt.text += (flash.utils.getTimer()-temp) + "rn";
????temp=flash.utils.getTimer();
????
????//为防止记录的内容过多,在记录部分时间后去掉监听
????if (txt.text.length >100)
????{
?????this.removeEventListener(Event.ENTER_FRAME,enterFrame);
????}
???}
??]]>
?</fx:Script>
?<s:TextArea id="txt" x="29" y="35" width="497" height="331"/>
</s:Application>
>>执行效果
从第二个数据开始,输出的时间间隔(时间差)基本相同
