2
0

FramerateCounterComponent.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using System;
  2. using System.Globalization;
  3. using Microsoft.Xna.Framework;
  4. namespace FarseerPhysics.SamplesFramework
  5. {
  6. /// <summary>
  7. /// Displays the FPS
  8. /// </summary>
  9. public class FrameRateCounter : DrawableGameComponent
  10. {
  11. private TimeSpan _elapsedTime = TimeSpan.Zero;
  12. private NumberFormatInfo _format;
  13. private int _frameCounter;
  14. private int _frameRate;
  15. private Vector2 _position;
  16. private ScreenManager _screenManager;
  17. public FrameRateCounter(ScreenManager screenManager)
  18. : base(screenManager.Game)
  19. {
  20. _screenManager = screenManager;
  21. _format = new NumberFormatInfo();
  22. _format.NumberDecimalSeparator = ".";
  23. #if XBOX
  24. _position = new Vector2(55, 35);
  25. #else
  26. _position = new Vector2(30, 25);
  27. #endif
  28. }
  29. public override void Update(GameTime gameTime)
  30. {
  31. _elapsedTime += gameTime.ElapsedGameTime;
  32. if (_elapsedTime <= TimeSpan.FromSeconds(1)) return;
  33. _elapsedTime -= TimeSpan.FromSeconds(1);
  34. _frameRate = _frameCounter;
  35. _frameCounter = 0;
  36. }
  37. public override void Draw(GameTime gameTime)
  38. {
  39. _frameCounter++;
  40. string fps = string.Format(_format, "{0} fps", _frameRate);
  41. _screenManager.SpriteBatch.Begin();
  42. _screenManager.SpriteBatch.DrawString(_screenManager.Fonts.FrameRateCounterFont, fps,
  43. _position + Vector2.One, Color.Black);
  44. _screenManager.SpriteBatch.DrawString(_screenManager.Fonts.FrameRateCounterFont, fps,
  45. _position, Color.White);
  46. _screenManager.SpriteBatch.End();
  47. }
  48. }
  49. }