SDL_GetTicks();
これは現在の時刻をUint32形の整数にして取得することができます。メインループのSDL_Delay()をWait();に直す。 void Wait() { static Uint32 preCount; //前回の時間を保存する変数 float WaitTime = 1000.0f / 60; //1000=1秒で、1秒間に60週したい。(希望速度) Uint32 WaitCount = (Uint32)( WaitTime + 0.5f ); //float形をUint32形に変換。小数点以下の四捨五入(+0.5f) if( preCount ) //初回はこの処理をしない。 { Uint32 nowCount = SDL_GetTicks(); //現在の時刻を取得。(1/1000秒単位) Uint32 Interval = nowCount - preCount; //現在の時刻から前の時刻を引く=経過時間。 if( Interval < WaitCount ) //経過時間が希望速度より小さい場合(速い場合) { Uint32 DelayTime = WaitCount - Interval; //希望時間までに必要な残りの時間を計算。 SDL_Delay( DelayTime ); //必要な残り時間のみを休憩させる。 } }else{ SDL_Delay(1000); //初回のみ一秒待機させてみた。 } preCount = SDL_GetTicks(); //現在の時間を次回に使用するために取得する。 }