fps.cpp
1    //FPS処理のソースファイル
2    
3    #include "fps.h"
4    
5    #include "font.h"
6    
7    //グローバル変数
8    ST_FPS fps;
9    
10   //FPS初期化
11   void FPSInit()
12   {
13   	//Windowsが起動してから現在までの時間を取得する。
14   	fps.FirstTakeTime = GetNowHiPerformanceCount();
15   
16   	//他の値も初期化する
17   	fps.NowTakeTime = fps.FirstTakeTime;
18   	fps.OldTakeTime = fps.FirstTakeTime;
19   	fps.DeltaTime =  0.000001f;
20   	fps.FrameCount = 1;
21   	fps.Average = 0.0f;
22   
23   	return; 
24   }
25   
26   //計測
27   void FPSCheck()
28   {
29   	//現在の時刻を取得
30   	fps.NowTakeTime = GetNowHiPerformanceCount();
31   
32   	//デルタタイムの計算
33   	fps.DeltaTime = (fps.NowTakeTime - fps.OldTakeTime) / MICRO_SECOND;
34   
35   	//現在の時刻を保存
36   	fps.OldTakeTime = fps.NowTakeTime;
37   
38   	//現在がMaxフレーム目なら
39   	if(fps.FrameCount==GAME_FPS)
40   	{
41   		//1フレームからMaxフレームまでの合計時間を計算する
42   		float TotalFrameTime = fps.NowTakeTime - fps.FirstTakeTime;
43   
44   		//合計時間を理想のFPS値で割って平均値を計算する
45   		float CalcAverage = TotalFrameTime / GAME_FPS;
46   
47   		//1秒あたりのフレーム数に変換
48   		fps.Average = MICRO_SECOND / CalcAverage;
49   
50   		//1フレーム目の時刻を取得
51   		fps.FirstTakeTime = GetNowHiPerformanceCount();  
52   
53   		//フレーム数を1に戻す
54   		fps.FrameCount = 1;
55   	}
56   	else
57   	{
58   		//フレーム数をカウントアップ
59   		fps.FrameCount++;
60   	}
61   
62   	return;
63   }
64   
65   //描画
66   void FPSDraw()
67   {
68   	//ドットフォントでFPSを描画
69   	DrawFormatStringToHandle(0, 0, GetColor(255, 255, 255),
70   		fontDotSmall.Handle,
71   		"FPS:%3.1f", fps.Average);
72         
73   	return; 
74   }
75   
76   //待機
77   void FPSWait()
78   {
79   	//早すぎたときに待機するミリ秒
80   	int wait = 0;
81   
82   	//待ち時間を計測する。
83   	wait =
84   		MICRO_SECOND / GAME_FPS * fps.FrameCount		//理想の時間
85   		- (fps.NowTakeTime - fps.FirstTakeTime);	//実際の時間
86   
87   	wait/=MILL_SECOND;	//ミリ秒に変換
88   	
89   	//もし待機時間があるなら
90   	if(wait > 0 && wait <= WAIT_TIME_MILL)
91   	{
92   		//メッセージを処理しながら待つ
93   		WaitTimer(wait);
94   	}
95   	return;
96   }
97