§8 シューティング・ゲーム(1)3 プログラミング実習
 back next 

【6】 MISILEの発射

 スペースキーを押すとミサイルがSHIPの先端から発射されるようにする。MISILEの移動は、UFOより少し早くする。UFOは幅(Width)の1/3、およそ16ピクセルである。MISILEは高さ(Height)が25ピクセルであるから、その高さ分ずつ移動することにする。

操作 12 タイマー(Timer1)のイベントに対応するメソッドにMISILEが上方向に移動するためのプログラム(下線部)を次のように追加する。

    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の移動
        '右端に到達したときの処理
        If picUFO.Left > Me.ClientSize.Width Then
            picUFO.Left = 0    '左端へ移動
            picUFO.Top = picUFO.Top + picUFO.Height    '下方向へ移動
        End If
        'MISILE移動
        If picMISILE.Visible = True Then    '表示されているか
            picMISILE.Top = picMISILE.Top - picMISILE.Height    '上方向へ移動
            If picMISILE.Top < 0 Then        '上端到達
                picMISILE.Visible = False    '非表示設定
            End If
        End If
    End Sub

操作 13 フォーム(Form1)のKeyDownイベントに対応するメソッドにスペースキーで発射するためのプログラム(下線部)を次のように追加する。

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyCode = Keys.Right Then    '[→]キー
            <<略>>
        ElseIf e.KeyCode = Keys.Left Then    '[←]キー
            <<略>>
        ElseIf e.KeyCode = Keys.Space Then    'Spaceキー
            If picMISILE.Visible = False Then    'MISILE非表示か
                picMISILE.Visible = True    'MISILEを表示
                '初期座標設定
                picMISILE.Left = picSHIP.Left + picSHIP.Width / 2 - picMISILE.Width / 2
                picMISILE.Top = picSHIP.Top
            End If
        End If
End Sub

ミサイル発射開始位置 MISILEのTopプロパティはSHIPのTopプロパティと同じとする。
 MISILEはSHIPの中央(左図のB)から発射するので、MISILEのLeftプロパティはSHIPのLeftとWidthプロパティから計算する。
@ picMISILE.Left = picSHIP.Left
A picMISILE.Left = picSHIP.Left + picSHIP.Width / 2
B picMISILE.Left = picSHIP.Left + picSHIP.Width / 2 - picMISILE.Width / 2
結果 スペースキーを押すとSHIPの位置からMISILEが発射する。

 

【7】 コントロールの重なり

図の重なり ピクチャボックスを配置した順番によっては、スペースキーを押したとき、右図のようにSHIPの上にMISILEが表示される場合がある。
 原因は、ピクチャボックスに限らず、コントロールを配置した順に上に重ねられるためである。
 デザインウィンドウでオブジェクトを右クリックし、メニューから[最前面へ移動]または[最背面へ移動]を選択すると重なりの順序が変わる。ここでは、メソッドを使って重なりを変更する。

操作 14 MISILE発射時、SHIPの上にMISILEが表示されないようMISILEの重なりを最背面に設定するプログラム(下線部)をフォーム(Form1)のLoadイベントに対応するメソッドに追加する。

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'UFOの初期位置
        picUFO.Left = 0
        picUFO.Top = 0
        'SHIPの初期位置
        picSHIP.Left = (Me.ClientSize.Width - picSHIP.Width) / 2
        picSHIP.Top = Me.ClientSize.Height - picSHIP.Height - 20
        'BOMBとMISILEを非表示に設定する。
        picBOMB.Visible = False
        picMISILE.Visible = False
        'MISILEの重なりを「最背面」に設定する。
        picMISILE.SendToBack()
    End Sub

※ 最前面に設定するには、BringToFrontメソッドを使う。


 back next 
 §8 シューティング・ゲーム(1)3 Copyright©2008 Hiroshi Masuda 

 

 

inserted by FC2 system