Программирование
Веб программирование

VB Net анимация. Часть II

 
 

Сейчас мы сделаем программку, в которой картинка будет отскакивать от краев формы. Чтобы картинка двигалась автоматически, можно использовать циклы, но намного удабнее воспользоваться таймером. Для начала я напишу все свойства таймера:

Name - имя таймера.
Enabled - одно из самых важных свойств, оно есть пратически у всех объектов. Это свойство блокирует объект если его значение равно False(ложь), и разблокирует если значение равно True. При помощи этого свойства мы будем включать и выключать таймер
Interval - Это свойство устанавливает интервал обновления таймера в милесекундах, например, если поставить 1000, то таймер будет обновляться каждую секунду.

Теперь от вводной части перейдем к практике.
На форме размети 1 PictureBox(измени свойство Image на путь к картинке, если нет картинки, то можешь взять мою:

), ещё размести кнопку(св-во Text = "Пуск"), и 2 таймера(у них свойства Enabled = False, Interval = 1). Кстати, наверное ты заметил, что таймер размещается не на форме, а под формой, вот здесь:

Вобщем, у тебя должно получится что - то наподобие этого:

Теперь код:

Dim Napravl As Integer = 1 ' Объявляем переменную Napravl для хранения чисел, и присваиваем ей начальное значение '1'. Чтобы задать начальное значение переменной для хранения символов, надо писать так: Dim Stroka As String = "Начальное значение для переменной типа String"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' При нажатии на кнопку:

If Timer1.Enabled = False And Timer2.Enabled = False Then ' Если Timer1 и Timer2 выключены то:

If Napravl = 1 Then Timer1.Enabled = True ' Если переменная Napravl = 1, то включаем первый таймер
If Napravl = 2 Then Timer2.Enabled = True ' Если переменная Napravl = 2, то включаем второй таймер
Button1.Text = "Стоп" ' Меняем текст в кнопке
Else ' Если хоть один таймер = True, то при нажатии на кнопку, она будет действовать как Стоп:
If Timer1.Enabled = True Then Napravl = 1 ' Если Timer1.Enabled равен True, то Napravl = 1. Этим самым, мы сохраняем направление движения картинки.
If Timer2.Enabled = True Then Napravl = 2

' Выключаем таймеры
Timer1.Enabled = False
Timer2.Enabled = False

Button1.Text = "Пуск"
End If
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' У таймера есть событие Tick, оно обновляет таймер, взависимости от свойства Interval
PictureBox1.Left = PictureBox1.Left + 2 ' Двигаем картинку вправо
If PictureBox1.Left >= Form1.ActiveForm.Width - PictureBox1.Width Then ' Если картинка достигла края формы(почти у каждого объекта есть свойства Width(ширина) и Height(высота)(в окне свойств они входят в разворачивающий список 'Size') Так вот, Form1.ActiveForm.Width - ширина формы(чтобы изменить свойства формы, в VB.Net надо писать не Form1.Свойство, а Form1.ActiveForm.Свойство), PictureBox1.Width - ширина картинки. От ширины формы отнимаем ширину картинки, и получаем край формы. Блин.. чё - то я в объяснениях перестарался :-))
' Двигаем картинку в другом направлении:
Timer1.Enabled = False
Timer2.Enabled = True
End If
End Sub 

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
PictureBox1.Left = PictureBox1.Left - 2 ' Двигаем картинку влево
If PictureBox1.Left <= 0 Then
Timer2.Enabled = False
Timer1.Enabled = True
End If
End Sub

Вот и всё! Теперь постарайся все это переварить, и вобще по экспорементируй с тем что узнал в предыдущих шагах.
Исходник


Есть вопросы? Спроси на нашем форуме!!
МИША [15.05.2011 14:45]

Блин, чет я не допер:
Получается что PictureBox1.Left это расстояние от центральной точки картинки до центральной точки формы что ли?!

Вова [11.07.2011 23:03]

Немного заморочено, но становится все интереснее.

*** [19.09.2011 08:35]

Не проще использовать Timer1.Stop()
Timer1.Start()?????

Серёга [06.01.2012 01:33]

я ни черта не понял, но мне нравится!

Саня [28.01.2012 13:33]

Если объявить Napravl как статическую переменную, то можно обойтись одним таймером
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Static направление As Integer = 1
PictureBox1.Left = PictureBox1.Left + направление
If PictureBox1.Left = Form1.ActiveForm.Width - PictureBox1.Width Then
направление = -1
End If
If PictureBox1.Left = 0 Then
направление = 1
End If
End Sub

Рома [03.06.2012 13:52]

Чет не получается, стулия и ошибок не выдает, и картинка не движется

AniFox [24.07.2012 13:46]

Переработал исходник. Вот что получилось:
Dim Napravl As Integer = 1
Private Sub Button1Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Interval = 20
If Timer1.Enabled = False Then
Timer1.Enabled = True
Button1.Text = "Stop"
ElseIf Timer1.Enabled = True Then
Timer1.Enabled = False
Button1.Text = "Start"
End If
End Sub
Private Sub Timer1
Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Napravl = 1 Then
PictureBox1.Left = PictureBox1.Left + 2
If PictureBox1.Left >= Me.Width - PictureBox1.Width - 10 Then
Napravl = 2
End If
ElseIf Napravl = 2 Then
PictureBox1.Left = PictureBox1.Left - 2
If PictureBox1.Left <= 0 Then
Napravl = 1
End If
End If
End Sub

begzod [18.11.2012 21:58]

а как сделать так,чтобы картинка заходила в одну сторону формы и с другой выходила,и так бесконечно

Алексей(alex13sh) [18.11.2012 22:39]

мда уж

код бредово оформлен((
begzod, я те второй раз уже помогаю))
в таймере делаешь условие если картинка уже полностью запределом потом перемещаешь картинку за тругой придел используя (Left) и нетрогая (Top)
предел примерно так узнаётся if pic1.Left+pic1.Width<0 then это запределами левой стороны формы или >Me.ScaleWidth Then это запределами правой стороны

begzod [19.11.2012 06:07]

да я недавно бейсик начал юзать.

Лёша [10.01.2013 12:37]

Гран мерси за длинное объяснение! Круто!

Phoenix222210 [29.04.2014 12:51]

Отличный Урок! Все работает. Спасибо



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.