智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

检测FPS和内存占用

Posted on   Bill Yuan  阅读(888)  评论(0编辑  收藏  举报

转自:http://as3blog.com/as3/fps-memory-leak-monitor-of-as3/

 

使用:

代码
var monitor:MonitorKit = new MonitorKit(MonitorKit.MKMODE_T);
addChild(monitor);

 

MonitorKit类:

复制代码
代码
package com.as3blog.utils
{
    
import flash.display.Sprite;
    
import flash.display.Stage;
    
import flash.events.Event;
    
import flash.system.System;
    
import flash.text.TextField;
    
import flash.text.TextFieldAutoSize;
    
import flash.text.TextFormat;
    
import flash.utils.getTimer;

    
public class MonitorKit extends Sprite
    {
        
public static const MKMODE_T:String = "MKMODE_T";
        
public static const MKMODE_B:String = "MKMODE_B";
        
public static const MKMODE_L:String = "MKMODE_L";
        
public static const MKMODE_R:String = "MKMODE_R";
        
public static const MKMODE_TL:String = "MKMODE_TL";
        
public static const MKMODE_TR:String = "MKMODE_TR";
        
public static const MKMODE_BL:String = "MKMODE_BL";
        
public static const MKMODE_BR:String = "MKMODE_BR";

        
private static var stageInstance:Stage;

        
private var lastTime:uint = getTimer();
        
private var frames:Number = 0;
        
private var monitorKitTextField:TextField;
        
private var mode:String;
        
private var textColor:uint;
        
private var backgroundColor:uint;
        
private var transparent:Boolean;
        
public static var delay:Number = 0;

        
public function MonitorKit(_mode:String = MKMODE_T, _transparent:Boolean = true, _textColor:uint = 0xffffff, _backgroundColor:uint = 0x000000)
        {
            mode 
= _mode;
            transparent 
= _transparent;
            textColor 
= _textColor;
            backgroundColor 
= _backgroundColor;
            
// Initialize it when rendered on the stage.
            addEventListener(Event.ADDED_TO_STAGE, initMonitorHandler);
        }

        
private function initMonitorHandler(event:Event):void
        {
            
// Unregister the event handler
            removeEventListener(Event.ADDED_TO_STAGE, initMonitorHandler);
            stageInstance 
= this.stage;
            monitorKitTextField 
= new TextField();
            monitorKitTextField.selectable 
= false;
            monitorKitTextField.background 
= transparent;
            monitorKitTextField.textColor 
= textColor;
            monitorKitTextField.backgroundColor 
= backgroundColor;
            monitorKitTextField.autoSize 
= TextFieldAutoSize.LEFT;
            var format:TextFormat 
= new TextFormat();
            format.font 
= "Courier New";
            format.size 
= 15;
            monitorKitTextField.setTextFormat(format);
            monitorKitTextField.defaultTextFormat 
= format;
            monitorKitTextField.text 
= "[ Loading ]";
            addChild(monitorKitTextField);
            stageInstance.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }

        
public function enterFrameHandler(evt:Event):void
        {
            frames
++;
            var currentTime:uint 
= getTimer();
            var deltaTime:uint 
= currentTime - lastTime;
            var fps:Number 
= frames / deltaTime * 1000;
            monitorKitTextField.text 
= "FPS: " + fps.toFixed(1);
            monitorKitTextField.appendText(
"\nMem: " + Number(System.totalMemory / 1024 / 1024).toFixed(3+ "(M)");
            frames 
= 0;
            lastTime 
= currentTime;
            
// Replace the monitor object
            switch (mode)
            {
                
case MKMODE_T:
                    monitorKitTextField.x 
= stageInstance.stageWidth / 2 - monitorKitTextField.width / 2;
                    monitorKitTextField.y 
= 0;
                    
break;
                
case MKMODE_B:
                    monitorKitTextField.x 
= stageInstance.stageWidth / 2 - monitorKitTextField.width / 2;
                    monitorKitTextField.y 
= stageInstance.stageHeight - monitorKitTextField.height;
                    
break;
                
case MKMODE_L:
                    monitorKitTextField.x 
= 0;
                    monitorKitTextField.y 
= stageInstance.stageHeight / 2 - monitorKitTextField.height / 2;
                    
break;
                
case MKMODE_R:
                    monitorKitTextField.x 
= stageInstance.stageWidth - monitorKitTextField.width;
                    monitorKitTextField.y 
= stageInstance.stageHeight / 2 - monitorKitTextField.height / 2;
                    
break;
                
case MKMODE_TL:
                    monitorKitTextField.x 
= 0;
                    monitorKitTextField.y 
= 0;
                    
break;
                
case MKMODE_TR:
                    monitorKitTextField.x 
= stageInstance.stageWidth - monitorKitTextField.width;
                    monitorKitTextField.y 
= 0;
                    
break;
                
case MKMODE_BL:
                    monitorKitTextField.x 
= 0;
                    monitorKitTextField.y 
= stageInstance.stageHeight - monitorKitTextField.height;
                    
break;
                
case MKMODE_BR:
                    monitorKitTextField.x 
= stageInstance.stageWidth - monitorKitTextField.width;
                    monitorKitTextField.y 
= stageInstance.stageHeight - monitorKitTextField.height;
                    
break;
                
default:
                    
break;
            }
        }
    }
}
复制代码

 

(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示