Анимация: шарик отскакивает от стенок - VB
Формулировка задачи:
Всем привет, задали задачу по бэйсику, сделать анимацию, фигуры я нарисовал, осталось сделать анимацию.http://www.cyberforum.ru/attachments/279031d1370543469
Фигура "круг" лежащая на "отрезке" должна перемещаться
1. Сначала падает вниз
2. Передвигается в правый угол
3. От угла отталкивается и падает в центр
4. От центра отталкивается и передвигается в левый угол
5. С левого угла передвигается на первоначальную точку
Собственно как все это сделать?
Решение задачи: «Анимация: шарик отскакивает от стенок»
textual
Листинг программы
Option Explicit
Private Type Pos
x As Single
Y As Single
End Type
Dim WithEvents Tmr As Timer
Dim Entity As Pos, Increment As Pos, Inc As Long
Dim Follow() As Pos, FollowStep As Long
Private Sub Form_Load()
Set Tmr = Me.Controls.Add("VB.Timer", "Tmr")
Tmr.Interval = 50
Tmr.Enabled = True
Me.Width = Me.ScaleHeight
Me.AutoRedraw = True
Me.Scale (-10, 10)-(10, -10)
ReDim Follow(6)
Follow(0).x = 5: Follow(0).Y = 7
Follow(1).x = 2: Follow(1).Y = 7
Follow(2).x = 0: Follow(2).Y = -7
Follow(3).x = 7: Follow(3).Y = 0
Follow(4).x = 0: Follow(4).Y = -7
Follow(5).x = -7: Follow(5).Y = 0
Follow(6).x = 2: Follow(6).Y = 7
Entity = Follow(0)
FollowStep = 0
SetIncrement
End Sub
Private Sub SetIncrement()
Dim A As Double, L As Double, S As Long
Entity = Follow(FollowStep)
FollowStep = (FollowStep + 1) Mod (UBound(Follow) + 1)
L = Sqr((Follow(FollowStep).x - Entity.x) ^ 2 + (Follow(FollowStep).Y - Entity.Y) ^ 2)
Inc = L
S = IIf(-(Follow(FollowStep).Y - Entity.Y) > 0, -1, 1)
A = -(Follow(FollowStep).x - Entity.x) / L
Increment.x = -A
Increment.Y = Sqr(1 - A * A) * S
End Sub
Private Sub CalcScene()
If Inc Then
Entity.x = Entity.x + Increment.x
Entity.Y = Entity.Y + Increment.Y
Inc = Inc - 1
Else: SetIncrement
End If
End Sub
Private Sub DrawScene()
Me.Cls
Me.Line (5, 4)-Step(5, -1), , BF
Me.Circle (Entity.x, Entity.Y), 3
Me.Refresh
End Sub
Private Sub Tmr_Timer()
CalcScene
DrawScene
End Sub