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+"
";
}
public function enterFrame(e:Event):void{
//在画面上记录进入帧的时间
txt.text += (flash.utils.getTimer()-temp) + "
";
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>
>>执行效果
从第二个数据开始,输出的时间间隔(时间差)基本相同