ページ 11

龍神録プログラミングの館17章~18章

Posted: 2014年5月14日(水) 22:28
by elle
こんばんは。
今、龍神録プログラミングの館17章の部分を試しています。
一通り打ち込んだのですが当たり判定の部分だけが期待した動作にならず(弾が素通りしてしまいます)、
最終的にはweb17章のページから丸々コピー&ペーストしたのですが、これでもうまくいきませんでした。
(が、18章から起動すると上手くいくようです。)
具体的には、

コード:

void out_main()
{
	int i, s;
	for (i = 0; i<CSHOT_MAX; i++){//自機ショット総数
		if (cshot[i].flag>0){
			for (s = 0; s<ENEMY_MAX; s++){//敵総数
				if (enemy[s].flag>0){
					if (out_judge_cshot(i, s)){//自機ショットと敵が当たっていれば
						cshot[i].flag = 0;//その自機ショットを消す
						enemy[s].hp -= cshot[i].power;//弾の持つパワー分HPを減らす
						enemy_death_judge(s);//敵が死ぬかどうかを決める
					}
				}
			}
		}
	}
}

コード:

					if (out_judge_cshot(i, s)){//自機ショットと敵が当たっていれば
が決して真にならないようです(18章のプロジェクトでは真になります)。
なぜでしょうか。
全ての章のプロジェクトを一括ダウンロードのものを使用しています。
(ファイル添付がうまくいかないので…プロジェクト pass : mixc
環境:
Windows7 Professional
MSVC2013EE

Re: 龍神録プログラミングの館17章~18章

Posted: 2014年5月14日(水) 23:14
by Tatu
17章のタイトルは「自機にショットを撃たせてみよう」で
18章のタイトルは「自機ショットに当たり判定を付けてみよう」となっています。

17章を試している段階なのであれば
自機ショットの当たり判定のコードはないのではないでしょうか?

Re: 龍神録プログラミングの館17章~18章

Posted: 2014年5月15日(木) 18:02
by elle
Tatuさん

あ…すいません、18章の間違いでした。
17章のプロジェクトをベースに、18章の内容を作成している形です。失礼しました。
龍神録プログラミングの館18章の一番下の実行結果のように、敵に当たって敵の体力を全て削ったら敵が消える、というのが期待する結果です。

コード以外に変更したことと言えば、「error LNK2026: モジュールは SAFESEH イメージには安全ではありません。」に対処するために
プロジェクト>プロパティ>構成プロパティ>リンカー>詳細設定>安全な例外ハンドラーを含むイメージ を いいえ (/SAFESEH:NO)にしたくらいです。
原因は別の箇所にあるのでしょうか…

Re: 龍神録プログラミングの館17章~18章

Posted: 2014年5月15日(木) 19:40
by Tatu
17章の説明では
cshot.cnt++;
があり、弾の画面外用のdranx,dranyも書かれているのに

配布プロジェクトのcalc_cshot()では
cshot.cnt++;
もdranx,dranyも書かれていません。

自機ショットの当たり判定は
cshot.cntが0より大きい時に判定するようになっているため、
cshot.cnt++;
がないと判定されません。

Re: 龍神録プログラミングの館17章~18章

Posted: 2014年5月15日(木) 20:06
by elle
Tatuさん

ありがとうございます!その通りでした。
cshot.cppのcalc_cshot()関数にcshot.cnt++;を追加したら期待した動作になりました。
cshot.cppの方に原因があったんですね。
紹介されていた差分ソフトを使って何やら違う部分があるなとは思っていたのですが、
cshot.cnt > 0の部分が影響していることを見落としていました…。
ありがとうございました。