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