Imports System.Drawing
Imports System.Windows.Forms
Public Class Form1
Private manX As Integer = 50 ' Начальная X-координата
Private manY As Integer = 100 ' Y-координата (не меняется)
Private frame As Integer = 0 ' Текущий кадр анимации
Private direction As Integer = 1 ' Направление движения (1 - вправо, -1 - влево)
Private frameWidth As Integer = 40 ' Ширина кадра
Private frameHeight As Integer = 60 ' Высота кадра
Private frames As List(Of Point())
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Создаем кадры анимации
frames = New List(Of Point())
' Кадр 1
frames.Add({New Point(0, 0), New Point(20, 10), New Point(20, 20), New Point(10, 30), New Point(25, 40), New Point(10, 40)})
' Кадр 2
frames.Add({New Point(10, 0), New Point(30, 10), New Point(30, 20), New Point(20, 30), New Point(35, 40), New Point(20, 40)})
' Кадр 3
frames.Add({New Point(10, 0), New Point(20, -5), New Point(20, 20), New Point(10, 30), New Point(25, 40), New Point(10, 40)})
' Кадр 4
frames.Add({New Point(0, 0), New Point(10, -5), New Point(20, 20), New Point(20, 30), New Point(35, 40), New Point(20, 40)})
' Настройка таймера
Timer1.Interval = 100 ' Скорость анимации (чем меньше, тем быстрее)
Timer1.Start()
DoubleBuffered = True ' Устранение мерцания
End Sub
Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
' Рисуем человечка текущим кадром
Dim g As Graphics = e.Graphics
Dim points() As Point = frames(frame)
Dim scaleX = 10
Dim scaleY = 10
' Рисуем туловище
g.FillRectangle(Brushes.Blue, manX + (points(0).X *scaleX), manY + (points(0).Y*scaleY), 10, 30)
' Рисуем голову
g.FillEllipse(Brushes.Red, manX + (points(0).X *scaleX)-3, manY + (points(0).Y * scaleY)-7, 15, 15)
' Рисуем левую ногу
g.DrawLine(Pens.Black, manX+ (points(3).X * scaleX) , manY + (points(3).Y*scaleY), manX + (points(4).X *scaleX), manY + (points(4).Y*scaleY))
' Рисуем правую ногу
g.DrawLine(Pens.Black, manX+ (points(3).X * scaleX), manY + (points(3).Y*scaleY), manX + (points(5).X*scaleX), manY + (points(5).Y *scaleY))
'Рисуем левую руку
g.DrawLine(Pens.Black, manX + (points(1).X*scaleX), manY + (points(1).Y*scaleY), manX + (points(0).X*scaleX), manY + (points(0).Y*scaleY) + 15)
'Рисуем правую руку
g.DrawLine(Pens.Black, manX+ (points(2).X*scaleX), manY + (points(2).Y*scaleY), manX + (points(0).X * scaleX), manY + (points(0).Y * scaleY) + 15)
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
' Обновляем кадр анимации
frame = (frame + 1) Mod frames.Count
' Передвигаем человечка
manX += 5 * direction
' Проверяем, не достиг ли край формы
If manX + frameWidth > Me.ClientSize.Width Or manX < 0 Then
direction *= -1 ' Меняем направление
End If
Me.Invalidate() ' Перерисовываем форму
End Sub
End Class