[目次へ][前へ][次へ][表紙へ]
 シューティングゲームを作ろう その8

 14.敵と自機の弾の当たり判定
	;敵と自機の弾の当たり判定
	if shot_f == 1 {
		for i, 0, ENEMAX
			if enemy_state(i) == 1 & shot_x + 31 >= enemy_x(i) & shot_x <= enemy_x(i) + 31 & shot_y + 31 >= enemy_y(i) & shot_y <= enemy_y(i) + 31 {
				dsplay 1
				enemy_state(i) = 2
				eneexplode_cnt(i) = 0
				shot_f = 0
				score += 100
				if score > hiscore { hiscore = score }
			}
		next
	}

 敵と自機の弾の当たり判定は、見た目の大きさで行います。敵も自機の弾も32×32です。

 自機の弾が存在する場合のみ当たり判定を行います。
 通常状態の敵と当たり判定を行います。
 shot_x + 31がenemy_x(i)以上、かつshot_xがenemy_x(i) + 31以下、かつshot_y + 31がenemy_y(i)以上、かつshot_yがenemy_y(i) + 31以下の時当たりです。

 敵の爆発音を鳴らします。
 敵の状態を「爆発中」に変えます。
 敵の爆発用カウンタに0を入れます(explodeは「爆発する」です)。
 自機の弾を消します。
 スコアに100点加算します。

 自機の弾を消すのではありますが、for 〜 nextループは続行します(_breakで抜けません)。弾が2匹以上の敵に同時に当たっている可能性もあるからです。

 15.敵が爆発中の処理
	;敵が爆発中の処理
	for i, 0, ENEMAX
		if enemy_state(i) == 2 {
			eneexplode_cnt(i)++
			if eneexplode_cnt(i) == 16 { enemy_state(i) = 0 }
		}
	next

 爆発中の敵は移動しない、弾を撃たない、自機の弾との当たり判定を行わない、爆発中は爆炎を描く等は、該当するそれぞれの処理でやっています。
 あとは、爆発状態をしばらく維持するだけです。そこで、爆発中の敵については爆発用カウンタを1ずつ増やし、16になったら消します。

 なお、敵が爆発中の処理は敵と自機の弾の当たり判定より前に書きます。後ろに書くと、eneexplode_cnt(i)の初期値を0に設定したのに、すぐさま1に変わってしまうからです。


[目次へ][前へ][次へ][表紙へ] inserted by FC2 system