设计一个FPS计数器,即记录每秒钟Flash播放的帧数。由于每时每刻实际渲染工作量的不同,Flash播放器的帧频不一定能够帧数地按照定义的帧频播放,尤其是在3D应用中。那么有这样一个FPS计数器,就可以发现在那些场景中Flash播放比较迟钝,从而优化代码和美工设计。
本人为了实现代码,折腾了1个小时多,呵呵!
1.打开Flash CS3,新建一个 ActionScript 文件,写上代码:
package
{
import flash.text.TextField;
import flash.text.TextFormat;
public class FPSText extends TextField
{
//构造器函数
function FPSText()
{
setTextProp();
}
//设置文本方法
function setText(msg:String):void
{
this.text = msg;
}
//设置动态文本属性
private function setTextProp():void
{
//尺寸自动
this.autoSize = "left";
//显示最初文本
this.text = "loading...";
//不可选择
this.selectable = false;
//设置格式
this.defaultTextFormat = getFormat();
}
//设置文本的样式
private function getFormat():TextFormat
{
var myFmt:TextFormat = new TextFormat();
//粗体
myFmt.bold = true;
//字体
myFmt.font = "Arial";
//字号
myFmt.size = 16;
//颜色
myFmt.color = 0xFF0000;
return myFmt;
}
}
}
按 Ctrl + S 【保存】命令,文件名为:FPSText.as,放在桌面上。以上的代码在这里就不解释了,因为已写上注释。
2.新建一个 ActionScript 文件,文档类如下:
//帧频测试
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.getTimer;
import FPSText;
public class FPS extends Sprite
{
//帧数
private var numFrames:int = 0;
//隔几个计算一次时间
private var interval:int = 10;
//开始时间
private var startTime:int;
//创建动态文本实例
private var fpsText:FPSText = new FPSText();
//构造器函数.传递路径参数
public function FPS()
{
init();
}
//初始化函数
private function init():void
{
//设置帧率
stage.frameRate = 30;
//得到开始时间
startTime = getTimer();
//让动态文本显示在舞台上
addChild(fpsText);
//注册enterFrame事件侦听器
addEventListener(Event.ENTER_FRAME,update,false,0);
}
//enterFrame 事件侦听器
private function update(event:Event):void
{
//如果帧数累计等于间隔数
if (++numFrames == interval)
{
//得到结束时间
var now:Number = getTimer();
//帧数除于时间,得到帧频
var actualFPS:Number = numFrames/((now-startTime)/1000);
//把帧频取整,并转化为字符串,显示在动态文本中
fpsText.setText(actualFPS.toFixed());
//修改开始时间
startTime = now;
//xx帧数
numFrames = 0;
}
}
}
}
保存在桌面,文件名为:FPS.as。注意:第二个as文件示本例最重要的代码。
3.新建一个 Flash 文件,打开【属性】面板,在文档类写上:FPS,然后保存在桌面,测试影片。
希望能够与大家一起分享。