プレイ日記
myu314 myu314
再生位置を「A:BGMVARを使って取得する方法」と「B:経過フレーム数から計算する方法」の2種で求めて、その差分を表示するプログラムです。音ゲーとかで使えます。 【4KF5K3H3】 そういえばリフレッシュレート調べたけど実際ちゃんと合うのか試してなかったので作りました。
10そうだね
プレイ済み
返信[1]
親投稿
myu314 myu314
このプログラムでは再生位置をMMLで一番短い音符の192分音符(これを1tickとします)の数で求めますが、仕様上どうやっても1tickはズレがでます。そのため2tick以上ズレた場合をエラーとして検出しています(FIRST_ERRが最初にエラーが発生した時間、RECENT_ERRは最近発生した時間) そもそも1tickは大体のテンポで1フレームの長さより短いですし(テンポ120で約10.4msec、1フレームは約16.7msec)、仕様上フレーム単位でしかボタン判定できないし1tickの程度の誤差は気にしない!:p 一応新/旧3DS・BPM240 で1時間くらい2tick以上のズレは発生してません。もっと長くても多分大丈夫。
1そうだね
プレイ済み
返信[2]
親投稿
myu314 myu314
BGMVARで再生位置が求まるなら、わざわざ経過フレーム数から計算して求める必要なさそうに見えるかもしれませんが、当たり判定やマーカーの表示位置をテンポに依存せずに設定したりしたい時には使います。ゲーム次第ですね:) なお実際のゲームで使う場合、ホームに戻ったり画面閉じたりすると盛大にズレるので、両方のやりかたで取得するのが正解かも。盛大にずれたらBGMVARの値を使って補正したり。音ゲーでポーズはご法度だとは思うけど:)
1そうだね
プレイ済み
返信[3]
親投稿
myu314 myu314
あ、一応プログラム試さなくても良いように。 3DSのフレームレートは、59.834Hz らしいです。ただしプチコン3号でBGMと同期するには 59.8312 くらいが上手くいくようです(59.834だと6分くらいでズレがでました) BIGの場合は 59.94Hz ですが、もしかすると 59.93995 の方が良いかもしれません(未確認です)
1そうだね
プレイ済み