可変フレームレートについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
EKISUKE
記事: 108
登録日時: 13年前

可変フレームレートについて

#1

投稿記事 by EKISUKE » 12年前

可変フレームレートの基本的な考え方について教えてください。


学校のPCで同じプログラムが60FPSで動いたり30FPSで動いたりします。
この原因はわかっていてopenframeworksのofSetFrameRateで、これを設定していると学校のPCでは60FPSでは動かないです。
逆に、家のPCでは200FPSで動くのでこれをセットしないと動作が速すぎます。
なので、どの環境でも一定のスピードで動くものが作りたかったので可変フレームレートについて勉強しようと思いました。

学校で聞くと、1秒で60ドット動くキャラがいるとして、1秒60フレームだった場合1フレームに1ドット動けばいい。
30フレームだと、2ドット動くというふうにする。とうふうに教わったのですが、

1.キャラの1フレームで動くべき量 = キャラの移動量 * 1/フレームレート ということでしょうか?

これをプログラムに実装するにあたって関数化したいのですが、

2.可変フレームレートというのは、どこまで適応?すればいいのでしょうか?キャラの移動についてはそうなのですが、動くものすべてに適応すればいいということでしょうか?

以上2点を教えて欲しいです。お願いします。

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 15年前
住所: 北海道札幌市
連絡を取る:

Re: 可変フレームレートについて

#2

投稿記事 by Dixq (管理人) » 12年前

可変フレームレートにすると極端に実装が難しくなるゲーム分野があるので、その点注意して下さい。

一番楽なのは60FPS固定フレームレートで考えることです。

EKISUKEさんが教えてもらった手法は、FPSが多くなると早く、少なくなると遅くなりますが、
「1秒間に60回計算する」という決まりを必ず守れば動く速さは一定になります。

まず、速すぎる処理を止める処理について。
こちらにその説明が書いてあります。
http://dixq.net/g/03_14.html

60FPSより速くなりそうなら、60FPSになるまで待機します。

しかし、これだと処理落ちした時は、動きが遅くなります。
そのため、フレームスキップを導入します。
http://dixq.net/forum/viewtopic.php?f=3&t=11722

ゲームプログラムの中身を大きく分けると

while(1){
  更新部();
  描画部();
}

簡単に言うとこのようになっている場合が多いでしょう。
この時、簡単なゲームであれば、処理落ちする原因のほとんどは描画です。
更新(物体の移動計算・あたり判定計算等)より描画の方に時間がかかるので、描画をスキップして複数回更新部を計算します。

つまり、
処理が速すぎるならsleepし、
処理が遅すぎるなら描画をスキップする。
こうして更新部の処理を必ず1秒間に60回行うようにすれば動きは一定になります。

もし完全に可変フレームレートでゲームを作りたければ動く物体をすべて時間で計算する必要があります。

EKISUKE
記事: 108
登録日時: 13年前

Re: 可変フレームレートについて

#3

投稿記事 by EKISUKE » 12年前

返信遅くなってすみません。
他のことでつまずいているので、可変フレームレートの方はあとに回そうと思います。
答えて下さったのに申し訳ありません。
サイトは見させていただきました。今の問題が解決次第、参考にさせて頂きます。
もし、よろしければ、今つまずいている問題を質問させていただくのですが、それに答えていただければありがたいです。

本当にすみません。

閉鎖

“C言語何でも質問掲示板” へ戻る