私もFPSを表示するプログラムを作ってみました
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int x, add ;
LONGLONG time ;
LONGLONG nowtime ;
float fps ;
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// メインループ(何かキーが押されたらループを抜ける)
x = 0 ;
add = 8 ;
ScreenFlip() ;
time = GetNowHiPerformanceCount() ;
fps = 0.0f ;
while( ProcessMessage() == 0 )
{
// 移動
x += add;
if( x < 0 || x > 640 ) add = -add ;
// 画面のクリア
ClearDrawScreen() ;
// ボックスの描画
DrawBox( x, 0, x + 64, 64, GetColor( 0,255,0 ), TRUE ) ;
// FPSの描画
DrawFormatString( 0, 0, GetColor( 255,255,255 ), "FPS:%.3f", fps ) ;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
// FPS計算処理
nowtime = GetNowHiPerformanceCount() ;
fps = 1000000.0f / ( nowtime - time ) ;
time = nowtime ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}
実行してみると分かりますが、59.456f の値が表示されることもあれば 60.167f の値が表示されることもあります、
DirectXでは正確にVSync直後に時間を計測することができませんので、このような値の誤差が発生します
PCの性能や構成によって誤差の大きさも変化すると思いますので、FPSが61と計測されても特に不思議ではないと思います
30FPSと表示されるのは、仰られている通り処理落ちだと思います