カテゴリー
Visual Basic

ラケットとボールの位置関係で打ち返す方向を変える

ブロック崩しでは、ボールのx軸方向の向きと、ラケットで打ち返した時のラケット上でのボールの位置によって、打ち返す方向が変わります。

これを実装してみましょう。

画面右側に向かっているボールを、ラケットの左半分で打ち返すと、ボールは画面左側に向かうように方向を変えます。同様に、画面左側に向かっているボールをラケットの右半分で打ち返すと、、ボールは画面右側に向かうように方向を変えます。

ボールのx軸方向の進行方向と、ボールのx座標が、ラケットの中央よりも右か左か、によって動きが変わります。

条件がちょっと複雑なので、ChangeDxファンクションプロシージャを作成して条件分岐するようにしましょう。
x軸方向の向きが変わるときはTrue、そうでないときはFalseを返します。

    Public Function ChangeDx(ByVal rr As Rectangle) As Boolean
        Dim center As Integer
        center = rr.Left + rr.Width / 2
        If dx > 0 And x < center Then '左から来たボールがラケットの左半分に当たった?
            Return True
        End If
        If dx < 0 And x > center Then '右から来たボールがラケットの右半分に当たった?
            Return True
        End If
        Return False
    End Function

HitRacket内でChangeDxを呼び出し、Trueならばdxの符号を反転させます。

    Public Sub HitRacket()
        Dim br, rr As Rectangle
        br = New Rectangle(x, y, Ball.Width, Ball.Height)
        rr = New Rectangle(Racket.Left, Racket.Top, Racket.Width, Racket.Height)
        If rr.IntersectsWith(br) And dy > 0 Then
            dy = -dy
            'ボールがラケットに当たった位置によってはx方向も変える
            If ChangeDx(rr) Then
                dx = -dx
            End If
        End If
    End Sub