ページ 11

太鼓の鉄人で理解できないコードがあります。

Posted: 2017年11月06日(月) 15:52
by sakurasaku
太鼓の鉄人のコードを理解しようとプログラムを読んでいるのですが、

コード:

void input_bullet(){
	int k;
	double sc0=stage.cnt*16.6666666666, sc1=(stage.cnt+1)*16.6666666666; //←
	double cnt=music.term*humen[stage.humen_cnt].cnt; //←ここです
	if(sc0<=cnt && cnt<sc1){
		if((k=serch_bullet())!=-1){
			enter_bullet(k,humen[stage.humen_cnt].knd-1,stage.spd);
		}
		stage.humen_cnt++;
	}
}
bullet.cppの

Re: 太鼓の鉄人で理解できないコードがあります。

Posted: 2017年11月06日(月) 15:54
by sakurasaku
すみません。途中で途切れてしまいました。コメントで指しているところの、sc0, sc1, cntが何を表す変数なのかがわかりません。解説お願いします。

Re: 太鼓の鉄人で理解できないコードがあります。

Posted: 2017年11月07日(火) 22:45
by Dixq (管理人)
もう10年位前のコードなので定かではないですが、おそらく1フレームの時間かと思います。
60FPSで動作しているゲームにおいて、1フレームの時間は1/60秒、つまり16.6666....[ms]を意味します。
1/60に現在のフレーム数をかけるとあるべきゲーム時間が出てきます。
ゲームの中で計算上進んでいる時間とリアルで進んだ時間を一致させないと音ゲーが成立しないので、
その調整をしながらゲームを制御することになります。
関数名から察するにbulletつまり弾、つまりダンレボでいう矢印に相当するものが、何フレーム目に出現するかを計算して登録しているものと思います。

Re: 太鼓の鉄人で理解できないコードがあります。

Posted: 2017年11月10日(金) 21:37
by sakurasaku
理解できました。ありがとうございます。