現在のゲーム制作のフレームレートの処理において、ファイルの読み込み等で全体の処理が止まった際に、処理がまた動き始めた時にフレームレートが乱れ、少しの間ゲームが高速に動いてしまい、この問題を解消したいと思っています。
たぶんですが、毎フレームで現在の時間を取得し1フレームのウェイト時間を調整しているので、処理が止まっている間と現実の時間の差が出来てしまいフレームレートが乱れてしまっているのだと思っていますが、ではどうやって解消したらいいかを幾ら考えても思いつかないです。
色々とネット上で調べても、私が見た限りだと皆同じ様なコードをサンプルとして挙げていたので、良い情報が得られず困っていました。
現在のソースコード
C++
1void MainProc::FPS( void ) 2{ 3 static int fps_count = 0, count_0time = 0; 4 static int frame[60*60]; //60FTP * 60秒 5 int wait_time = 0, now_time = 0; 6 static int t = 0; 7 8 m_time_count++; 9 if( m_time_count >= ONE_MINUTE ) 10 m_time_count = 0; 11 12 fps_count = m_time_count % m_set_fps; 13 14 if( fps_count == 0 ) 15 { 16 // 60フレームの1回目 17 if ( t == 0 ) // 完全に最初なら待たない 18 wait_time = 0; 19 else // 前回記録した時間を元に計算 20 wait_time = count_0time + 1000 - GetNowCount(); // GetNowCount() 現在の時間をミリ秒で取得 21 } 22 else // 待つべき時間 = 現在あるべき時刻 - 現在の時刻 23 wait_time = (int)( count_0time + fps_count * ( 1000.0 / m_set_fps ) ) - GetNowCount(); 24 25 if( wait_time > 0 ) // 待つべき時間だけ待つ 26 Sleep( wait_time ); 27 28 now_time = GetNowCount(); 29 30 if( fps_count == 0 ) // 60フレームに1度基準を作る 31 count_0time = now_time; 32 frame[fps_count] = now_time - t; // 1周した時間を記録 33 t = now_time; 34 35 return; 36}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。