Анимация: шарик отскакивает от стенок - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5