How to Play
基本キー操作
移動…カーソルキー(←、↓、↑、→)
決定…Enterキー
戻る…Backspaceキー、Escapeキー
キーコンフィグを実装する予定
16keysの曲選択時
1 |
2 |
3 |
4 |
q |
w |
e |
r |
a |
s |
d |
f |
z |
x |
c |
v |
ゲームプレイ
16keysの場合
1 |
2 |
3 |
4 |
q |
w |
e |
r |
a |
s |
d |
f |
z |
x |
c |
v |
9keysの場合(テンキーも対応)
またはテンキー
リザルト
AAA
100~99%以上
AA
99~95%以上
A
95~90%以上
B
90~80%以上
C
80~70%以上
D
70~60%以上
E
60%未満
ELEファイルの書式
:と;の間に文字が入ります。
#TITLE
曲名を指定。
#SUBTITLE
曲名のサブタイトルを指定。
#ARTIST
アーティスト名を指定。
#ALBUMART
アルバムアートを指定。
#MUSIC
曲ファイルを指定。
#OFFSET
曲に対する譜面の開始位置。(単位はミリ秒で記述)
(例)
-170 → -0.17秒遅れてスタート(0.17秒早くスタート)
#BPMS
曲のBPMを指定。
(例)
182,364,182
,(カンマ)で区切る。
#BPMPOSITIONS
BPMを変更する場所の拍数を指定。
(例)
0,42,44
,(カンマ)で区切る。
譜面の書式
#NOTE
/*------------9keys--------------*/
keys:9
BASIC:2;
5,0,2
6,0,5
7,0,8
7,16,4
......
使用キー数、難易度の指定を記述。
□,□,□は順に小節数、1拍を32等分した何個目か、Noteの場所の指定を表す。
ノートの時間計算(押されるべき時間を求める)
何かの参考になればと思い書きます。
BPM変化無しの場合
(押されるべき時間)=60000(ミリ秒)/BPM×{(小節数)×4+(1拍を32等分した何個目か)/8}+オフセット
BPM変化有りの場合
各BPM変化ポジション(拍数)をAnとする。
An=(小節数)×4+(1拍を32等分した何個目か)/8
各BPM変化ポジションの差の数列をBnとすると、
Bn=An+1-An
各BPM変化ポジション間の時間をTnとして、
Tn=Bn×60000/BPM[n] なので
(押されるべき時間)=(k=0Σn)Tn+60000/BPM[n]×{(小節数)×4+(1拍を32等分した何個目か)/8}+オフセット
ノートの描画計算
jubeatの場合は時間で固定位置にアニメーション描画させる。
StepMania(DDR)やⅡDXの場合は座標計算が必要です。
jubeatの場合
(現在時間)-(押されるべき時間)< (一枚あたりの表示時間)×{(不等式を満たす最小の自然数)-((ジャストが何枚目か)+1)}
上式から何枚目を描画させるかを判定させる。
不等式を満たす最小の自然数が解になる。
スクロールノート(DDR、ⅡDX、太鼓、etc)の場合
BPM変化無しの場合
(1拍分のノート間隔(pixel))=(等速時の1拍分のノート間隔)×(倍速オプション)
1秒間あたりのフレーム数(FPS)を60とすると
(1秒間あたりの拍数)=BPM/60
(1拍あたりのフレーム数)=FPS/(1秒間あたりの拍数)なので
(1フレームあたりに動かす座標)=(1拍分のノート間隔)/(1拍あたりのフレーム数)
スクロールノート(DDR、ⅡDX、太鼓、etc)の場合
BPM変化有りの場合
n=BPM変化した回数とし、
ノートの座標を求める。
(ノートのポジション)=32×(小節数)+(1拍を32等分した何個目か)
各BPM変化ポジションの差の数列をBnとすると、
Bn=An+1-An
各BPM変化ポジション間の時間をTnとして、
Tn=Bn×60000.0/BPM[n]
各BPM変化する時間をCnとして、
Cn=(k=0Σn)Tn+オフセット
ここからゲームプレイ中における計算
BPM変化させる時間になったらBPM変化の差から譜面のずれる座標を計算。
BPMの差によるズレ[y]=(k=0Σn){等速時の1拍分の座標[y]×(Cn-Cn+1)[ms]×(BPM[n]-BPM[k])/60000[ms]}
BPM変化によってずれる座標[y]=
(倍速オプション)×
{オフセット[ms]×等速時の1拍分のノート間隔[y]×(BPM[n]/60000)[beat/ms]+BPMの差によってズレる座標[y]}[y]
+判定ラインの座標[y]
1秒間あたりの拍数[beat/s]=BPM[n]/60
1拍あたりのフレーム数[Hz/beat] =(PCの垂直同期信号に合うフレーム数。60FPSにする)[Hz]/1秒間あたりの拍数[beat/s]
1フレームあたりに動かす座標[y/Hz]=1拍分の間隔[y/beat]/1拍あたりのフレーム数[Hz/beat]
1拍分の座標[y]=等速時の1拍分の座標[y]×倍速オプション
したがって、
ノートの座標[y]=(ノートのポジション/8 [beat]×1拍分の座標[y/beat])[y]+BPM変化によってずれる座標[y]
-1フレームあたりに動かす座標[y/Hz]×再生時間[ms]×60[Hz]/1000[ms]