ページ 11

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

Posted: 2011年7月02日(土) 11:45
by あきびん
はじめまして、よろしくお願いします。まだまだ初心者です
現在龍神縁プログラミングの館を参考に全方位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;
		}
	}
}

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

Posted: 2011年7月02日(土) 13:29
by softya(ソフト屋)
はじめまして。

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

弾を発射した瞬間の向きを
cshot.muki=ch.muki;     //自機の向きをショットの向きに代入
するように代入場所を変えてください。
ポイントは弾を発射しているコードの中に入れるです。

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

Posted: 2011年7月02日(土) 15:08
by あきびん
通常ショット登録のほうに入れれば、うまくいきました。
ありがとうございました!