游戏帧数,也就是游戏帧循环一次说需时间。这是个非线性值,故采用平均帧数作为游戏帧数。
具体代码如下:
1
//------------------------------------------------------------------
2
using System;
3
using System.IO;
4
//------------------------------------------------------------------
5
namespace Dxfcv222.Xna
6
{
7
/// <summary>
8
/// fps
9
/// </summary>
10
public static class Fps
11
{
12
private static double now;
13
private static int counter;
14
private static double totalSeconds;
15
16
/// <summary>
17
/// 当前fps
18
/// </summary>
19
public static double Now
20
{
21
get { return now; }
22
}
23
/// <summary>
24
///
25
/// </summary>
26
public static void Initialize() { }
27
static Fps()
28
{
29
}
30
/// <summary>
31
/// 更新
32
/// </summary>
33
/// <param name="elapsedTime"></param>
34
public static void Update(double elapsedTime)
35
{
36
Updating(ref elapsedTime);
37
38
double thisFrameTotalSeconds = totalSeconds + elapsedTime;
39
if (thisFrameTotalSeconds < 1.0f)
40
{
41
++counter;
42
totalSeconds = thisFrameTotalSeconds;
43
}
44
else
45
{
46
double thisFrameRemainSeconds = thisFrameTotalSeconds - 1.0f;
47
now = counter;
48
if (thisFrameRemainSeconds * 4 < elapsedTime)
49
{
50
++now;
51
}
52
counter = 0;
53
totalSeconds = thisFrameRemainSeconds;
54
}
55
}
56
/// <summary>
57
///
58
/// </summary>
59
/// <param name="elapsedTime"></param>
60
public static void Updating(ref double elapsedTime)
61
{
62
if (now == 0)
63
{
64
if (elapsedTime > 0.0001)
65
{
66
now = 1.0f / elapsedTime;
67
}
68
}
69
}
70
/// <summary>
71
/// 重置
72
/// </summary>
73
public static void Reset()
74
{
75
now = 0;
76
counter = 0;
77
totalSeconds = 0;
78
}
79
}
80
}
81
//------------------------------------------------------------------












浙公网安备 33010602011771号