UFOゲームの制作 VB6
 (3) キー入力の処理 前へ 目次へ 次へ 

 1. 自機の移動

 左右のカーソル移動キーを押すと自機が左右に移動する処理を作成する。
 処理はForm_KeyDownプロシージャに作成する。
 ここで、キーボードを押したときのイベントをフォーム(Form1)が最初に受け取るようにするため、Form1のKeyPreviewプロパティをTrueに設定しておく。

KeyPreview プロパティ
  True … まずフォームがキーボードイベントを受け取り、その後でアクティブなオブジェクトが受け取る。
  False … アクティブなオブジェクトがキーボードイベントを受け取る。フォームは受け取らない。

 自機の移動はimgTaihouオブジェクトのLeftプロパティを変更して移動させる。Leftプロパティが減少すれば自機は左へ、増加すれば自機は右へ移動する(ように見える)。
 敵より少し速く移動できるように、移動量Dxの1.5倍程度を加減算する。Dxは負の場合もあるのでAbs(Dx)として絶対値を使う。移動後の座標を計算した後で、左右の枠(ウィンドウのフレーム)を超えているかどうかをチェックする必要がある。
 プログラムリストは最後に示す。

 

 2. 自機弾の発射

 スペースキーを押すと自機弾が発射する処理を作成する。処理は自機の移動と同じForm_KeyDownプロシージャに作成する。

 スペースキーが押されたとき、自機弾imgTama1が非表示(VisibleプロパティがFalse)であれば発射する。実際には自機の座標上に自機弾を配置して、自機弾を表示するだけである。
 スペースキーが押されたら、VisibleプロパティがFalseの自機弾を探してTrueにする。この処理で、一度にウィンドウ上にはMaxTama+1個以上の弾が表示されなくなる。(発射弾の制限)
 自機弾の移動の処理はタイマー(Timer1_Timerプロシージャ)の中で作成する。

・プログラムリスト

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim n As Integer
    '#1 自機の移動(←、→)
    If KeyCode = vbKeyLeft Then         '移動(←)
        imgTaihou.Left = imgTaihou.Left - Abs(Dx) * 1.5
    ElseIf KeyCode = vbKeyRight Then    '移動(→)
        imgTaihou.Left = imgTaihou.Left + Abs(Dx) * 1.5
    End If
    '#2 自機が両端まで到達したとき → 自機を端に固定
    If imgTaihou.Left <= 0 Then     '左枠を越えた
        imgTaihou.Left = 0
    ElseIf imgTaihou.Left + imgTaihou.Width >= Form1.ScaleWidth Then    '右枠を越えた
        imgTaihou.Left = Form1.ScaleWidth - imgTaihou.Width
    End If
    '- - - - - - - - - - - - - - -
    '#3 自機弾発射 スペースキーON and 自機弾 表示ON
    For n = 0 To MaxTama    '自機弾数分調べる
        If KeyCode = vbKeySpace And imgTama1(n).Visible = False Then
            With imgTama1(n)    '自機弾発射
                .Left = imgTaihou.Left + imgTaihou.Width / 2    '自機弾配置
                .Top = imgTaihou.Top
                .Visible = True     '自機弾表示ON
            End With
            Exit For        '1発だけ発射してforを抜け出す
        End If
    Next n
End Sub

#1 押されたキーのコード(キー番号)は引数KeyCodeに記憶されている。左右のカーソル移動キーのコードはそれぞれvbKeyLeft, vbKeyRightとしてあらかじめ定義されている。
 If文で左右どちらが押されたか判定し、左ならimgTaihouオブジェクトのLeftプロパティを減じ、右なら増やす。移動量はグローバル変数Dx(敵の移動量)の1.5倍(Abs(Dx)*1.5)としている。敵より少し速く移動できるようにしている。
 Abs(Dx)のようにDxを絶対値としているのは、Dxが負になることがあるからである。

#2 自機がウィンドウの両端を越えて移動しないようにするための処理である。

#3 For文で自機弾の個数分のチェックをする。次のIf文でスペースキーが押されたかどうかと自機弾のVisibleプロパティがFalseかどうかを判定している。ここでは、押されたキーの文字コードが引数KeyCodeに記憶されている。スペースキーのコードはvbKeySpaceとしてあらかじめ定義されている。
 発射できる自機弾があれば、次のWith文で自機弾のプロパティを設定する。

With imgTama1(n)
    .Left = imgTaihou.Left + imgTaihou.Width / 2
    .Top = imgTaihou.Top
    .Visible = True
End With
このWith文は次のように書いたのと同じことになる。
   imgTama.Left = imgTaihou.Left + imgTaihou.Width / 2
    imgTama.Top = imgTaihou.Top
    imgTama.Visible = True


 ここで実行すると、自機が左右のカーソル移動キーで左右に移動する。自機がウィンドウの端まで来るとそれ以上移動しないようになっている。また、スペースキーを押すと自機と同じ位置に自機弾が3発まで表示される。ただし、自機弾は動かない。


 (3) キー入力の処理 前へ 目次へ 次へ 
Copyright © 2002 Hiroshi Masuda 

 

 

inserted by FC2 system