add FPS counter
GitOrigin-RevId: 7186a6f3cd9ba35ff51b2232ebef67cbe3ad544c
This commit is contained in:
parent
c247b6c389
commit
568bcf8071
26
Jumpy.Shared/FPSCounter.cs
Normal file
26
Jumpy.Shared/FPSCounter.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Jumpy {
|
||||||
|
class FpsCounter {
|
||||||
|
private double fps = 0;
|
||||||
|
private int[] frameTimes = new int[60];
|
||||||
|
private int idx = 0;
|
||||||
|
|
||||||
|
public double Fps {
|
||||||
|
get => fps;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update() {
|
||||||
|
var now = Environment.TickCount; // ms
|
||||||
|
if (frameTimes[idx] != 0) {
|
||||||
|
var timeElapsed = now - frameTimes[idx];
|
||||||
|
fps = 1000.0 * frameTimes.Length / timeElapsed;
|
||||||
|
}
|
||||||
|
frameTimes[idx] = now;
|
||||||
|
idx++;
|
||||||
|
if (idx == frameTimes.Length) {
|
||||||
|
idx = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Camera.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Camera.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)FpsCounter.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)IDisplay.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)IDisplay.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)KeyboardInput.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)KeyboardInput.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)JumpyGame.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)JumpyGame.cs" />
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using Microsoft.Xna.Framework.Graphics;
|
using Microsoft.Xna.Framework.Graphics;
|
||||||
using Microsoft.Xna.Framework.Input;
|
using Microsoft.Xna.Framework.Input;
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Jumpy {
|
namespace Jumpy {
|
||||||
@ -14,6 +15,7 @@ namespace Jumpy {
|
|||||||
bool fullScreen = false;
|
bool fullScreen = false;
|
||||||
IDisplay display;
|
IDisplay display;
|
||||||
|
|
||||||
|
FpsCounter fpsCounter = new FpsCounter();
|
||||||
Player player;
|
Player player;
|
||||||
|
|
||||||
public JumpyGame() {
|
public JumpyGame() {
|
||||||
@ -70,6 +72,10 @@ namespace Jumpy {
|
|||||||
|
|
||||||
// Called when the game should draw itself.
|
// Called when the game should draw itself.
|
||||||
protected override void Draw(GameTime gameTime) {
|
protected override void Draw(GameTime gameTime) {
|
||||||
|
// We need to update the FPS counter in Draw() since Update() might get called more
|
||||||
|
// frequently, especially when gameTime.IsRunningSlowly.
|
||||||
|
fpsCounter.Update();
|
||||||
|
|
||||||
// Draw scene to RenderTarget.
|
// Draw scene to RenderTarget.
|
||||||
GraphicsDevice.SetRenderTarget(renderTarget);
|
GraphicsDevice.SetRenderTarget(renderTarget);
|
||||||
// GraphicsDevice.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true };
|
// GraphicsDevice.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true };
|
||||||
@ -87,7 +93,8 @@ namespace Jumpy {
|
|||||||
Rectangle drawRect = new Rectangle(
|
Rectangle drawRect = new Rectangle(
|
||||||
0, 0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);
|
0, 0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);
|
||||||
spriteBatch.Draw(renderTarget, drawRect, Color.White);
|
spriteBatch.Draw(renderTarget, drawRect, Color.White);
|
||||||
spriteBatch.DrawString(font, "FPS: 60", new Vector2(10, 10), Color.White);
|
string fpsText = $"FPS: {fpsCounter.Fps:F1}";
|
||||||
|
spriteBatch.DrawString(font, fpsText, new Vector2(10, 10), Color.White);
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
base.Draw(gameTime);
|
base.Draw(gameTime);
|
||||||
|
Loading…
Reference in New Issue
Block a user