BGMとフレームレートを合わせるには

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Chalaza

BGMとフレームレートを合わせるには

#1

投稿記事 by Chalaza » 13年前

音ゲーのようなものを作りたいのですが、
使用するBGMによって速さが違うので、フレームレートをそれに合わせなければならないですよね?
曲が変わるごとにゲームのフレームレートを変更するのが普通なのでしょうか?
BGMを加工して60フレームに無理やり合わせてもいいかと思っていますが、
DXライブラリで音ゲーを作る場合どうするのが良いでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: BGMとフレームレートを合わせるには

#2

投稿記事 by softya(ソフト屋) » 13年前

色んなエフェクトするのに曲のテンポに合わせてフレームレートを変えていたらエフェクトの調整が面倒です。
固定フレームレートで、マークが流れる速さ(移動速度)変えてやれば問題ないでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: BGMとフレームレートを合わせるには

#3

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

> 使用するBGMによって速さが違うので、フレームレートをそれに合わせなければならないですよね?

何故でしょう?
どのような設計を想定しているのでしょうか。

> BGMを加工して60フレームに無理やり合わせてもいいかと思っていますが、

という方法がよく分かりませんが、音ゲーは音楽が命なので、全ての基準を再生中の音楽にすべきでしょう。
ゲーム時間の時間軸もその再生音楽を基準とすると良いと思います。

ゲームの大きな区分を「更新部」「描画部」に分けてやり、描画部はスキップしても全く更新部に影響を与えないように作っておきます。
そして、例えば60fpsならば、1フレームは16.6666...msですべての処理を終えなければならないわけですが、
今の瞬間処理落ち等で17ms以上かかったとしましょう。
その時は、「描画部」を1度スキップして、2回連続で更新部を計算するようにします。
そして再生時間から今あるべき時刻まで待機することで同期します。

こんな手法で良いかと思います。ここのサイトで公開しているAerobeatはそうやって作りました。

Chalaza

Re: BGMとフレームレートを合わせるには

#4

投稿記事 by Chalaza » 13年前

すみません。自分が言いたかったのは、
色んな曲があるので、BGMのリズムの1泊のフレーム数が割りきれなかった場合どうすればいいのでしょうかという事です。
リズムの4拍が60フレームだったら一泊を15フレームにすればいいのですが、
4拍が70フレームとかだったら割りきれませんよね?
60フレームだと60回描画するとのことなので、小数点以下のフレームは反映できないのではないでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: BGMとフレームレートを合わせるには

#5

投稿記事 by softya(ソフト屋) » 13年前

描画フレームレートを60以上に上げる事はできませんし、少しずれた70や50など値や小数点以下の値などの中途半端な数字にすることも出来ません。
これは、液晶ディスプレイなどハードウェア的な要因によるものです。

なので、Dixq (管理人)さんの言われるように描画は毎秒60フレームより落ちること前提として音楽の進みに合わせて制御すれば良いと思います。
例えば描画のタイミングが1.62秒だった場合に相応しい状態の画面を逆算してつくり上げると言うことですね。

じゃあ、4拍で70フレームだった場合はどうするかと言うと60フレームが一秒ですから70/60/4が1拍の周期になりますね。つまり約292msです。

1/60
 :
17/60 約283ms ←
18/60 300ms ←

ちょうど最初の一拍目が17と18フレームの間と言う事になりますが、どちらにしろ人間の知覚や裏画面の描画、液晶の表示遅延など遅延要素が沢山あるので17か18フレームで表示できていれば違和感はないはずです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Chalaza

Re: BGMとフレームレートを合わせるには

#6

投稿記事 by Chalaza » 13年前

わかりました。
フレーム数が割りきれなかった場合は、一番近い割り切れるフレーム数を基準にすれば良いということですね。
ありがとうございました。解決しました。

閉鎖

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