§8 シューティング・ゲーム(1)4 | プログラミング実習 |
【8】 当たり判定
UFOとMISILEの当たり判定をするプログラムはUFOとMISILEが移動した後に追加する。
当たり判定は、それぞれの座標(picUFO.TopとpicMISILE.Top、picUFO.LeftとpicMISILE.Left)を比較して行う。
UFOとMISILEが当たったとき、UFOとMISILEを非表示にして、UFOの位置にBOMBを表示する。
操作 15 タイマー(Timer1)のイベントに対応するメソッドに当たり判定のプログラム(太字)を次のように追加する。
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles Timer1.Tick
picUFO.Left = picUFO.Left + picUFO.Width /
3 'UFOの移動
<<略>>
'MISILE移動
<<略>>
End If
End If
'当たり判定
If picUFO.Top <= picMISILE.Top And picMISILE.Top <= picUFO.Top + picUFO.Height And picUFO.Left <= picMISILE.Left + picMISILE.Width / 2 And picMISILE.Left + picMISILE.Width / 2 <= picUFO.Left + picUFO.Width Then
picUFO.Visible = False 'UFO非表示
picMISILE.Visible = False 'MISILE非表示
picBOMB.Top = picUFO.Top 'BOMB座標y設定
picBOMB.Left = picUFO.Left 'BOMB座標x設定
picBOMB.Visible = True 'BOMB表示
Application.DoEvents() 'イベント処理
Threading.Thread.Sleep(1000) '時間待ち(1秒)
picMISILE.Top = 0 'MISILE座標y設定
picMISILE.Left = 0 'MISILE座標x設定
picUFO.Top = 20 'UFO座標y設定
picUFO.Left = 0 'UFO座標x設定
picUFO.Visible = True 'UFO表示
picBOMB.Visible = False 'BOMB非表示
End If
End Sub
※ 時間待ちのメソッドSleepは、指定した時間だけ処理を停止する。時間はミリ秒単位で指定する。
※ 時間待ちの直前のイベント処理は、ピクチャボックスの非表示や表示の命令が完了する前に時間待ちにならないようにするためである。
○ 当たり判定の条件式
Y座標(Topプロパティ)
picMISILE.TopがUFOの画像上にあるとき、当たりと判定する。
picUFO.Top ≦ picMISILE.Top ≦ picUFO.Top + picUFO.Height
↓条件式
picUFO.Top <= picMISILE.Top And picMISILE.Top <= picUFO.Top + picUFO.Height
X座標(Leftプロパティ)
MISILEの幅の1/2がUFOの画像上にあるとき、当たりと判定する。
picUFO.Left ≦ picMISILE.Left + picMISILE.Width / 2 ≦ picUFO.Left + picUFO.Width
↓条件式
picUFO.Left <= picMISILE.Left + picMISILE.Width / 2 _
And picMISILE.Left + picMISILE.Width / 2 <= picUFO.Left + picUFO.Width
§8 シューティング・ゲーム(1)4 | Copyright©2008 Hiroshi Masuda |