ページ 11

龍神録プログラミングの館 第13章で

Posted: 2014年4月11日(金) 01:15
by elvena
なんかうまく動かない。
弾幕関数も弾幕登録処理もコピペなんだけど、
なぜか挙動がおかしい。

001:本来10フレームに1度発射されるはずの自機狙い弾が、
毎フレーム発射される
002:本来角度が固定されるはずが、
常に自機狙い
004:本来円形弾が発射されるはずが、
半円形に発射される上に、2射目以降は自機狙いだけになる

などなど……

どういうことでしょうか

Re: 龍神録プログラミングの館 第13章で

Posted: 2014年4月11日(金) 05:11
by へにっくす
そのコピペしたソースを載せないで、原因が分かると思ってるんでしょうか。
エスパーな回答を期待してるのか?
そうでないなら怪しいと思うところでもいいから、載せましょうね
(プロジェクト一式固めてアップロードでもいい。その方が全体を見渡せて、見つけやすいかもしれない)
オフトピック
プログラムは、期待した通りには動かない。
書いた通りに動くんだ。
だからソースも載せないでおかしいと言ってるだけじゃ何も進展しないよ?

Re: 龍神録プログラミングの館 第13章で

Posted: 2014年4月11日(金) 09:31
by softya(ソフト屋)
龍神録とSTGの仕組みを理解するために勉強されていると思いますので、何がわからないという質問でしょうか?
コピペしてうまく動いたらOK!ってものでもないですよね。
1.弾の処理の仕組みがわからない。
2.デバッグの方法がわからない。
3.龍神録全体の仕組みがよく分かっていない。
そもそも、1章1章を順番に理解されていれば、問題から何が悪いか想像できるはずなのです。

Re: 龍神録プログラミングの館 第13章で

Posted: 2014年4月11日(金) 11:47
by Tatu
コピペしたというソースコードがないと正確な原因はわかりませんが考えられる可能性として

001:if文で10フレームに一度を意味する条件t%10==0が書かれていない可能性(もしくは条件の行が全くない)
002:角度を記憶するのは最初だけ。if(t==0)が抜けている可能性
004:一周する角度はPIではなくPI2。「2射目以降は自機狙いだけ」については全くわかりません。

本当に正確に写したのか疑問です。

あと、理解しないと自分の思う通りには書けません。

Re: 龍神録プログラミングの館 第13章で

Posted: 2014年4月11日(金) 17:25
by elvena
自己解決しました。

コード:

void shot_calc(int n){
		/*中略*/
			shot[n].bullet[i].x+=cos(shot[n].bullet[i].ang)*shot[n].bullet[i].spd;
			shot[n].bullet[i].y+=sin(shot[n].bullet[i].ang)*shot[n].bullet[i].spd;
			shot[n].bullet[i].cnt++;//←この部分の++を忘れていた
			if(shot[n].bullet[i].x<-50||shot[n].bullet[i].x>FIELD_MAX_X+50||
				shot[n].bullet[i].y<-50||shot[n].bullet[i].y>FIELD_MAX_Y+50){
		/*後略*/
ただの単純ミスで、見落としいていただけでした・・・
つまらぬことで質問してすみません。

いろいろいたらないところがありすみませんでした。
ご指摘ありがとうございます。
次回の質問からは気をつけます。