質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

全体の処理が止まるとフレームレートが乱れる現象に対応したい

RyuL
RyuL

総合スコア24

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3回答

0リアクション

0クリップ

261閲覧

投稿2022/10/02 03:35

現在のゲーム制作のフレームレートの処理において、ファイルの読み込み等で全体の処理が止まった際に、処理がまた動き始めた時にフレームレートが乱れ、少しの間ゲームが高速に動いてしまい、この問題を解消したいと思っています。

たぶんですが、毎フレームで現在の時間を取得し1フレームのウェイト時間を調整しているので、処理が止まっている間と現実の時間の差が出来てしまいフレームレートが乱れてしまっているのだと思っていますが、ではどうやって解消したらいいかを幾ら考えても思いつかないです。

色々とネット上で調べても、私が見た限りだと皆同じ様なコードをサンプルとして挙げていたので、良い情報が得られず困っていました。

現在のソースコード

C++

void MainProc::FPS( void ) { static int fps_count = 0, count_0time = 0; static int frame[60*60]; //60FTP * 60秒 int wait_time = 0, now_time = 0; static int t = 0; m_time_count++; if( m_time_count >= ONE_MINUTE ) m_time_count = 0; fps_count = m_time_count % m_set_fps; if( fps_count == 0 ) { // 60フレームの1回目 if ( t == 0 ) // 完全に最初なら待たない wait_time = 0; else // 前回記録した時間を元に計算 wait_time = count_0time + 1000 - GetNowCount(); // GetNowCount() 現在の時間をミリ秒で取得 } else // 待つべき時間 = 現在あるべき時刻 - 現在の時刻 wait_time = (int)( count_0time + fps_count * ( 1000.0 / m_set_fps ) ) - GetNowCount(); if( wait_time > 0 ) // 待つべき時間だけ待つ Sleep( wait_time ); now_time = GetNowCount(); if( fps_count == 0 ) // 60フレームに1度基準を作る count_0time = now_time; frame[fps_count] = now_time - t; // 1周した時間を記録 t = now_time; return; }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。