|( () ( T |/| |( » 21.10.2006 (Сб) 23:52
Смотря кокая фигура. Для окружности:
-------------------------
Dim x, y, vx, vy As Integer
Private Sub Form_Load()
x = Me.ScaleWidth / 2
y = Me.ScaleHeight / 2
vx = Rnd * 20
vy = Rnd * 20
End Sub
Private Sub Timer1_Timer()
Me.Cls
Me.Circle (x, y), 20
x = x + vx: y = y + vy
If x <= 20 Or x >= Me.ScaleWidth - 20 Then vx = -vx
If y <= 20 Or y >= Me.ScaleHeight - 20 Then vy = -vy
End Sub
--------------------------
если для какой другой, то проверяй координаты вершин, если они <0 или > Me.ScaleWidth и Me.ScaleHeight то меняй скорость на противоположную.
вот например для квадрата:
-------------------------------
Private Type vec
x As Integer
y As Integer
End Type
Dim F(3) As vec
Dim x, y, vx, vy As Integer
Private Sub Form_Load()
x = Me.ScaleWidth / 2
y = Me.ScaleHeight / 2
F(0).x = x - 10: F(0).y = y - 10
F(1).x = x + 10: F(1).y = y - 10
F(2).x = x + 10: F(2).y = y + 10
F(3).x = x - 10: F(3).y = y + 10
vx = Rnd * 20
vy = Rnd * 20
End Sub
Private Sub Timer1_Timer()
Me.Cls
Me.Line (F(0).x, F(0).y)-(F(1).x, F(1).y)
Me.Line (F(1).x, F(1).y)-(F(2).x, F(2).y)
Me.Line (F(2).x, F(2).y)-(F(3).x, F(3).y)
Me.Line (F(3).x, F(3).y)-(F(0).x, F(0).y)
For i = 0 To 3
If F(i).x <= 20 Or F(i).x >= Me.ScaleWidth - 20 Then vx = -vx
If F(i).y <= 20 Or F(i).y >= Me.ScaleHeight - 20 Then vy = -vy
Exit For
Next
For i = 0 To 3
F(i).x = F(i).x + vx: F(i).y = F(i).y + vy
Next
End Sub
------------------------------
P.S. Рисовать лучше через API.