ブロック崩しでは、ボールの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