·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]FPS帧数读取与检测的写法示例

时间:2012-11-01 12:56bbs.9ria.com
[AS3]FPS帧数读取与检测的写法示例

[AS3]FPS帧数读取与检测的写法示例

  1. package   
  2. {  
  3.  import flash.display.Bitmap;  
  4.  import flash.display.BitmapData;  
  5.  import flash.display.Sprite;  
  6.  
  7.  import flash.events.Event;  
  8.  import flash.geom.Rectangle;  
  9.  import flash.system.System;  
  10.  import flash.text.TextField;  
  11.  import flash.text.TextFieldAutoSize;  
  12.  import flash.text.TextFormat;  
  13.  import flash.utils.getTimer;  
  14.  public class Fps extends Sprite  
  15.  {  
  16.   private var fps:TextField;  
  17.   private var mem:TextField;  
  18.   private var instance:Fps;  
  19.   private var bitmapdata:BitmapData;  
  20.   private var i:int = 0;  
  21.   private var n:int = 10;  
  22.   private var diagramTimer:int;  
  23.   private var tfTimer:int;  
  24.   private var skins:int = -1;  
  25.   private var skinsChanged:int = 0;  
  26.   private static const diagramHeight:uint = 40;  
  27.   private static const diagramWidth:uint = 60;  
  28.   private static const maxMemory:uint = 500000000;  
  29.   public function Fps()  
  30.   {  
  31.    this.addEventListener(Event.ADDED_TO_STAGE,init);  
  32.   }  
  33.     
  34.   public function init(e:Event):void  
  35.   {  
  36.    var bitmap:Bitmap = null;  
  37.    this.removeEventListener(Event.ADDED_TO_STAGE,init);  
  38.    fps = new TextField();  
  39.    mem = new TextField();  
  40.    if(instance == null)  
  41.    {  
  42.     fps.defaultTextFormat = new TextFormat("Tahoma", 10, 16711680);  
  43.     fps.autoSize = TextFieldAutoSize.LEFT;  
  44.     fps.text = "FPS:" + Number(stage.frameRate).toFixed(2);  
  45.     fps.x = -diagramWidth - 2;  
  46.     addChild(fps);  
  47.       
  48.     mem.defaultTextFormat = new TextFormat("Tahoma", 10, 65280);  
  49.     mem.autoSize = TextFieldAutoSize.LEFT;  
  50.     mem.text = "MEM:" + byteToString(System.totalMemory);  
  51.     mem.x = -diagramWidth - 2;  
  52.     mem.y = fps.y + 10;  
  53.     addChild(mem);  
  54.     bitmapdata = new BitmapData(diagramWidth,diagramHeight,true,255);  
  55.     bitmap = new Bitmap(bitmapdata);  
  56.     bitmap.y = 24;  
  57.     bitmap.x = -diagramWidth;  
  58.     addChildAt(bitmap,0);  
  59.     addEventListener(Event.ENTER_FRAME,onEnterFrame);  
  60.     diagramTimer = getTimer();  
  61.     tfTimer = getTimer();  
  62.    }   
  63.      
  64.   }  
  65.     
  66.   private function onEnterFrame(e:Event):void  
  67.   {  
  68.    i++;  
  69.    if(i >= n)  
  70.    {  
  71.     i = 0;  
  72.     fps.text = "FPS: " + Number(1000 * n / (getTimer() - tfTimer)).toFixed(2);  
  73.     tfTimer = getTimer();  
  74.    }  
  75.    var _loc_2:* = 1000 / (getTimer() - diagramTimer);  
  76.    var _loc_3:* = _loc_2 > stage.frameRate ? (1) : (_loc_2 / stage.frameRate);  
  77.    diagramTimer = getTimer();  
  78.    bitmapdata.scroll(1, 0);  
  79.    bitmapdata.fillRect(new Rectangle(0, 0, 1, bitmapdata.height), 2852126720);  
  80.    bitmapdata.setPixel32(0, diagramHeight * (1 - _loc_3), 4294901760);  
  81.    mem.text = "MEM: " + byteToString(System.totalMemory);  
  82.    var ski:int = skins == 0 ? (0) : (skinsChanged / skins);  
  83.    bitmapdata.setPixel32(0, diagramHeight * (1 - ski), 4294967295);  
  84.    var meoryPer:Number = System.totalMemory / maxMemory;  
  85.    bitmapdata.setPixel32(0, diagramHeight * (1 - meoryPer), 4278255360);  
  86.   }  
  87.     
  88.   private function byteToString(byte:uint):String  
  89.   {  
  90.    var byteStr:String = null;  
  91.    if (byte < 1024)  
  92.    {  
  93.     byteStr = String(byte) + "b";  
  94.    }  
  95.    else if (byte < 10240)  
  96.    {  
  97.     byteStr = Number(byte / 1024).toFixed(2) + "kb";  
  98.    }  
  99.    else if (byte < 102400)  
  100.    {  
  101.     byteStr = Number(byte / 1024).toFixed(1) + "kb";  
  102.    }  
  103.    else if (byte < 1048576)  
  104.    {  
  105.     byteStr = Math.round(byte / 1024) + "kb";  
  106.    }  
  107.    else if (byte < 10485760)  
  108.    {  
  109.     byteStr = Number(byte / 1048576).toFixed(2) + "mb";  
  110.    }  
  111.    else if (byte < 104857600)  
  112.    {  
  113.     byteStr = Number(byte / 1048576).toFixed(1) + "mb";  
  114.    }  
  115.    else  
  116.    {  
  117.     byteStr = Math.round(byte / 1048576) + "mb";  
  118.    }  
  119.    return byteStr;  
  120.   }  
  121.  }  

 

  1. package{  
  2.  import flash.display.Sprite  
  3.  import flash.utils.Timer;  
  4.  import flash.events.Event;  
  5.  import flash.events.TimerEvent;  
  6.  import flash.text.TextField;  
  7.  public class Fps extends Sprite{  
  8.   private var txt:TextField;  
  9.   private var count:int=0 
  10.   public function Fps(){  
  11.    init()  
  12.   }  
  13.   private function init():void{  
  14.    txt=new TextField();//极酷播放器提示:创建文本实例  
  15.    txt.textColor=0xff0000;//设置文本颜色  
  16.    addChild(txt)//加载这个文本  
  17.    var myTimer:Timer = new Timer(1000);//Timer类挺好使,

    //类似于setInterval,参数是循环间隔时间,单位是毫秒  
  18.    myTimer.addEventListener("timer", timerHandler);//注册事件  
  19.    this.addEventListener("enterFrame",countHandler)//注册事件,2.0的onEnterFrame  
  20.    myTimer.start();//Timer实例需要start来进行启动  
  21.   }  
  22.   private function timerHandler(event:TimerEvent):void{//Timer实例调用的方法  
  23.    txt.text="FPS:"+count  
  24.    count=0//每隔1秒进行清零  
  25.   }  
  26.   private function countHandler(event:Event):void{//真循环调用的方法  
  27.    count++//数值递加  
  28.   }  
  29.  }  
  30. }  

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器