自機の向きにショットが動いてしまう

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

自機の向きにショットが動いてしまう

#1

投稿記事 by あきびん » 14年前

はじめまして、よろしくお願いします。まだまだ初心者です
現在龍神縁プログラミングの館を参考に全方位STGを作ろうと試みているのですが
17章の「自機にショットを撃たせて見よう」で悩んでいます。

掲示板の他のトピック等を参考にし、取りあえずキャラが向いている上下左右に弾が出てくれるですが
弾が出ている状態でキャラの向きを変えると、弾もキャラの向きの方へ動いていってしまいます。
多分cshot.cppのショットの移動計算が問題だと思うのですが、整数に変えたりしてもやっぱり連動してしまいます。
どうすれば発射時の方向に最後まで飛ばせるのでしょうか?

8方向移動のためにchar.cppは多少変更していますが、他は龍神録そのままです。
アドバイスを頂ける方がおられましたらよろしくお願いします。

以下はcshot.cpp変更部分です。

コード:

//ショットの移動計算
void calc_cshot(){
	for(int i=0;i<CSHOT_MAX;i++){
		if(cshot[i].flag==1){
			cshot[i].muki=ch.muki;	    //自機の向きをショットの向きに代入
			int dranx=cshot[i].spd+11/2,drany=cshot[i].spd+55/2;
				if(cshot[i].muki==2){    //正面だったら
					cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd;
					cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd;
					}
				else if(cshot[i].muki==0){  //左だったら
					cshot[i].x+=cos(270*cshot[i].angle)*cshot[i].spd;
					cshot[i].y+=sin(270*cshot[i].angle)*cshot[i].spd;
					}
				else if(cshot[i].muki==1){  //右だったら
					cshot[i].x+=cos(180*cshot[i].angle)*cshot[i].spd;
					cshot[i].y+=sin(180*cshot[i].angle)*cshot[i].spd;
					}
				else if(cshot[i].muki==3){  //下だったら
					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;
		}
	}
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 自機の向きにショットが動いてしまう

#2

投稿記事 by softya(ソフト屋) » 14年前

はじめまして。

これをcalc_cshotで
cshot.muki=ch.muki;     //自機の向きをショットの向きに代入
毎回やると、どうやっても自機の向きになってしまいます。
これは、自機の向きを毎フレーム弾に反映させるって意味になってしまっているわけです。

弾を発射した瞬間の向きを
cshot.muki=ch.muki;     //自機の向きをショットの向きに代入
するように代入場所を変えてください。
ポイントは弾を発射しているコードの中に入れるです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

あきびん

Re: 自機の向きにショットが動いてしまう

#3

投稿記事 by あきびん » 14年前

通常ショット登録のほうに入れれば、うまくいきました。
ありがとうございました!

閉鎖

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