Большое спасибо ! Еще пара вопросов:
1. Как сделать такое для нескольких прямоугольников ? Вообще, нужно сделать что-то типа лабиринта, может его стоит рисовать по другому, а не прямоугольниками ? Попробовал создать несколько прямоугольников и для каждого сделать
- Код: Выделить всё
If rect.Contains(x + AddX * Mul, y + AddY * Mul) Then Exit Sub
как-то странно, на некоторые круг не может попасть, а по некоторым "бегает" свободно...
Добавлено: решил с помощью For Each.
2. Пытался по аналогии сделать чтобы круг не "упирался в стену", а "толкал" прямоугольник перед собой:
- Код: Выделить всё
Public Class Form1
Dim x As Integer = 80 : Dim y As Integer = 215
Dim x1 As Integer = 100 : Dim y1 As Integer = 215
Dim rect As New Rectangle(x1, y1, 60, 150)
Dim AddX, AddY, Mul As Integer
Dim key As Keys
Private Sub PB_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PB.Paint
e.Graphics.FillRectangle(Brushes.Red, x1, y1, 60, 150)
e.Graphics.DrawEllipse(Pens.Blue, x, y, 20, 20)
End Sub
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
Dim k As Keys = e.KeyCode
If k = Keys.Left Or k = Keys.Right Then AddX = k - 38 : AddY = 0
If k = Keys.Up Or k = Keys.Down Then AddY = k - 39 : AddX = 0
If k = Keys.Up Or k = Keys.Left Then Mul = 1
If k = Keys.Down Or k = Keys.Right Then Mul = 21
If rect.Contains(x + AddX * Mul, y + AddY * Mul) Then
x1 += AddX : y1 += AddY
End If
x += AddX : y += AddY
PB.Refresh()
End Sub
End Class
Тоже не получается, сначала "толкает", а потом заезжает на него. Похоже, что я неправильно создаю прямоугольник.