音ゲーのようなものを作りたいのですが、
使用するBGMによって速さが違うので、フレームレートをそれに合わせなければならないですよね?
曲が変わるごとにゲームのフレームレートを変更するのが普通なのでしょうか?
BGMを加工して60フレームに無理やり合わせてもいいかと思っていますが、
DXライブラリで音ゲーを作る場合どうするのが良いでしょうか?
BGMとフレームレートを合わせるには
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: BGMとフレームレートを合わせるには
色んなエフェクトするのに曲のテンポに合わせてフレームレートを変えていたらエフェクトの調整が面倒です。
固定フレームレートで、マークが流れる速さ(移動速度)変えてやれば問題ないでしょう。
固定フレームレートで、マークが流れる速さ(移動速度)変えてやれば問題ないでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 15年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: BGMとフレームレートを合わせるには
> 使用するBGMによって速さが違うので、フレームレートをそれに合わせなければならないですよね?
何故でしょう?
どのような設計を想定しているのでしょうか。
> BGMを加工して60フレームに無理やり合わせてもいいかと思っていますが、
という方法がよく分かりませんが、音ゲーは音楽が命なので、全ての基準を再生中の音楽にすべきでしょう。
ゲーム時間の時間軸もその再生音楽を基準とすると良いと思います。
ゲームの大きな区分を「更新部」「描画部」に分けてやり、描画部はスキップしても全く更新部に影響を与えないように作っておきます。
そして、例えば60fpsならば、1フレームは16.6666...msですべての処理を終えなければならないわけですが、
今の瞬間処理落ち等で17ms以上かかったとしましょう。
その時は、「描画部」を1度スキップして、2回連続で更新部を計算するようにします。
そして再生時間から今あるべき時刻まで待機することで同期します。
こんな手法で良いかと思います。ここのサイトで公開しているAerobeatはそうやって作りました。
何故でしょう?
どのような設計を想定しているのでしょうか。
> BGMを加工して60フレームに無理やり合わせてもいいかと思っていますが、
という方法がよく分かりませんが、音ゲーは音楽が命なので、全ての基準を再生中の音楽にすべきでしょう。
ゲーム時間の時間軸もその再生音楽を基準とすると良いと思います。
ゲームの大きな区分を「更新部」「描画部」に分けてやり、描画部はスキップしても全く更新部に影響を与えないように作っておきます。
そして、例えば60fpsならば、1フレームは16.6666...msですべての処理を終えなければならないわけですが、
今の瞬間処理落ち等で17ms以上かかったとしましょう。
その時は、「描画部」を1度スキップして、2回連続で更新部を計算するようにします。
そして再生時間から今あるべき時刻まで待機することで同期します。
こんな手法で良いかと思います。ここのサイトで公開しているAerobeatはそうやって作りました。
-
Chalaza
Re: BGMとフレームレートを合わせるには
すみません。自分が言いたかったのは、
色んな曲があるので、BGMのリズムの1泊のフレーム数が割りきれなかった場合どうすればいいのでしょうかという事です。
リズムの4拍が60フレームだったら一泊を15フレームにすればいいのですが、
4拍が70フレームとかだったら割りきれませんよね?
60フレームだと60回描画するとのことなので、小数点以下のフレームは反映できないのではないでしょうか?
色んな曲があるので、BGMのリズムの1泊のフレーム数が割りきれなかった場合どうすればいいのでしょうかという事です。
リズムの4拍が60フレームだったら一泊を15フレームにすればいいのですが、
4拍が70フレームとかだったら割りきれませんよね?
60フレームだと60回描画するとのことなので、小数点以下のフレームは反映できないのではないでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: BGMとフレームレートを合わせるには
描画フレームレートを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フレームで表示できていれば違和感はないはずです。
これは、液晶ディスプレイなどハードウェア的な要因によるものです。
なので、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とフレームレートを合わせるには
わかりました。
フレーム数が割りきれなかった場合は、一番近い割り切れるフレーム数を基準にすれば良いということですね。
ありがとうございました。解決しました。
フレーム数が割りきれなかった場合は、一番近い割り切れるフレーム数を基準にすれば良いということですね。
ありがとうございました。解決しました。