MonoGame显示FPS
在MonoGame中显示实时FPS
帧计数器
public class FrameCounter { public FrameCounter() { } public long TotalFrames { get; private set; } public float TotalSeconds { get; private set; } public float AverageFramesPerSecond { get; private set; } public float CurrentFramesPerSecond { get; private set; } public const int MAXIMUM_SAMPLES = 100; private Queue<float> _sampleBuffer = new Queue<float>(); public override bool Update(float deltaTime) { CurrentFramesPerSecond = 1.0f / deltaTime; _sampleBuffer.Enqueue(CurrentFramesPerSecond); if (_sampleBuffer.Count > MAXIMUM_SAMPLES) { _sampleBuffer.Dequeue(); AverageFramesPerSecond = _sampleBuffer.Average(i => i); } else { AverageFramesPerSecond = CurrentFramesPerSecond; } TotalFrames++; TotalSeconds += deltaTime; return true; } }
使用方法:
private FrameCounter _frameCounter = new FrameCounter();
protected override void Draw(GameTime gameTime) { var deltaTime = (float)gameTime.ElapsedGameTime.TotalSeconds; _frameCounter.Update(deltaTime); var fps = string.Format("FPS: {0}", _frameCounter.AverageFramesPerSecond); _spriteBatch.DrawString(_spriteFont, fps, new Vector2(1, 1), Color.Black); }