龍神録の館17、18章について

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

龍神録の館17、18章について

#1

投稿記事 by こめかみ » 17年前

"---- cshot.cpp を変更 ----"の中の
//ショットの移動計算
#define CSOUT 20 //どれ位画面から外れたら消すか
void calc_cshot(){
        for(int i=0;i<CSHOT_MAX;i++){
                if(cshot.flag==1){
                        cshot.x+=cos(cshot.angle)*cshot.spd;
                        cshot.y+=sin(cshot.angle)*cshot.spd;
                        if(cshot.x<-CSOUT || cshot.x>FIELD_MAX_X+CSOUT ||
                                cshot.y<-CSOUT || cshot[i].y>FIELD_MAX_Y+CSOUT)//画面から外れたら
                                cshot[i].flag=0;
                }
        }
}


、の中に"cshot[i].cnt++;"が無いため18章で自機ショットの当たり判定が発生しませんでした。

[/pre]//ショットの移動計算
#define CSOUT 20 //どのくらい画面から外れたら消すか
void calc_cshot(){
for(int i=0;i<CSHOT_MAX;i++){
if(cshot[i].flag==1){
cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd;
cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd;
cshot[i].cnt++;
if(cshot[i].x<-CSOUT || cshot[i].x>FIELD_MAX_X+CSOUT ||
cshot[i].y<-CSOUT || cshot[i].y>FIELD_MAX_Y+CSOUT)//画面から外れたら
cshot[i].flag=0;
}
}
}[/pre]

これでうまくいきました。


そしてダウンロードできるプロジェクトファイルの18章cshot.cpp
の中では、


//ショットの移動計算
void calc_cshot(){
	for(int i=0;i<CSHOT_MAX;i++){
		if(cshot[i].flag==1){
			int dranx=cshot[i].spd+11/2,drany=cshot[i].spd+55/2;
			cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd;
			cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd;
			cshot[i].cnt++;
			if(cshot[i].x<-dranx || cshot[i].x>FIELD_MAX_X+dranx ||
				cshot[i].y<-drany || cshot[i].y>FIELD_MAX_Y+drany)//画面から外れたら
				cshot[i].flag=0;
		}
	}
}


こうなってたのですが、なんだか効率がよさそうですね。
解説が欲しいですがこの先にあるでしょうか。
int dranx=cshot[i].spd+11/2,drany=cshot[i].spd+55/2;
この計算について教えてください。

管理人

Re:龍神録の館17、18章について

#2

投稿記事 by 管理人 » 17年前

ご報告ありがとうございます。

まず、自機がうつ弾は龍神録プロジェクト\dat\img\char\bl1.pngですので、一度確認して下さい。
この画像サイズが11,55なんですね。
そして自機ショットは通った軌跡に障害物が無かったかを確認して、当たったかどうかを調べます。
その計算では前にいた位置をspdから予測して直線で求めています。
つまり軌跡をつないで計算していっているので、
「前回のフレームで弾が画面内にあり、今のフレームで画面外」の状態では消してはいけないのです。
前回のフレームで画面内、今のフレームで外、の状態で消すと、今のフレームで描いた最後の
画面外へ外れる軌跡が計算されていないことになります。

弾の位置はcshot.spd+画像サイズ/2が画面外なら前回も画面外だったことがわかるので、
この時に消さないといけないのです。

・・・なんていう事を解説無しで理解しろというのは酷ですね、追記しておきます;

こめかみ

Re:龍神録の館17、18章について

#3

投稿記事 by こめかみ » 17年前

なるほど、よくわかりました。
ありがとうございました。

閉鎖

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