Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория»
Dim у As Integer
Dim R As Integer
Dim Цвет_окружности As Long
Dim Цвет фона As Long
Private Sub Form Load()
х = 1000
у = 1500
R = 200
DrawWidth = 5 'Толщина линии
Цвет_окружности = vbBlack
Цвет_фона = BackColor
End Sub
Private Sub Timer1_Timer()
Circle (x, y), R, Цвет_окружности 'Рисуем окружность
For i = 1 To 500000: Next 'Пустой цикл для задания паузы
Circle (х, у), R, Цвет_фона 'Стираем окружность
х = х + 30 'Перемещаемся немного направо
End Sub
Пояснения: Когда вы попробуете выполнить эту программу на компьютере, изображение движущейся окружности может получиться некачественным — окружность в процессе движения будет мерцать и пульсировать. Это связано с разверткой электронно-лучевой трубки вашего монитора. Если создать маленькую паузу между рисованием и стиранием окружности, нежелательные эффекты сойдут на нет. Эту паузу я создаю пустым циклом. Поэкспериментируйте с радиусом, толщиной окружности, продолжительностью паузы или шагом движения по горизонтали. Последние две величины определяют скорость движения.
Задание 100: Пусть по экрану движется "вагон" — прямоугольник и два колеса.
Движем объекты
Мы больше не будем заниматься анимацией при помощи графических методов, потому что объекты двигать гораздо приятнее.
Поместим на форму объект Shape в виде той же окружности и таймер. Пусть окружность движется вверх. Программа:
Private Sub Timer1_Timer()
Shape1.Top = Shape1.Top — 20
End Sub
Как видите, она гораздо проще, чем программа анимации при помощи методов.
Задание 101: Пусть одновременно движутся две окружности. Таймер — один.
Задание 102: Одна вниз, другая направо.
Задание 103: Покажите своим друзьям фильм, снятый "секретной видеокамерой": В небе над вашим домом летит летающая тарелка. Для этого вам понадобится ввести в компьютер фотографию, на которой были бы видны ваш дом и небо. Роль летающей тарелки с успехом выполнит фигура эллипса с заливкой. Можете сделать ей окна (фигуры окружностей с желтой заливкой). Все эти фигуры должны лететь с одинаковой скоростью, не то окна "уплывут" с тарелки.
Заставим какую-нибудь фигуру двигаться направо, а затем самостоятельно отскочить от правого края формы:
Dim Шаг As Integer
Dim х As Integer
Private Sub Form_Load()
x = Shape1.Left
Шаг = 50
End Sub
Private Sub Timer1_Timer()
x = x + Шаг
Shapel.Left = x
If x > Width Then Шаг = -50 'Если фигура улетела за правый край формы, то лететь обратно
End Sub
Задание 104: Заставьте фигуру бесконечно двигаться, отскакивая от правого и левого краев формы.
Задание 105: "Биллиардный шар". Нарисуйте «биллиардный стол» — большой прямоугольник. Шар под углом летает по столу, отскакивая от его краев по закону отражения. Попав "в лузу" (любой из четырех углов стола), останавливается. Объектом здесь удобно взять Image с загруженной иконкой в виде шарика (подходящие иконки есть в Visual Basic).
Задание 105-1(сложное): "Часы со стрелками". Если вы в ладах с тригонометрией, сделайте часы со стрелками: часовой, минутной, секундной. Задача упростится, если вы выберете в качестве стрелок тоненькие сектора окружностей.
Задание 106: Изобразите полет камня, брошенного с башни, для задания 45 из 0. Напоминаю условие задания. Камень бросили горизонтально со 100-метровой башни со скоростью v=20m/c. Его расстояние от башни по горизонтали (s) выражается формулой s=v*t, где t — время полета камня в секундах. Высота над землей h выражается формулой h=100 — 9.81*t2/2. Нарисуйте башню, Землю. Камнем может служить Image с подходящей загруженной иконкой. Затем камень летит. Добейтесь, чтобы время полета камня на экране примерно соответствовало реальному времени, полученному при решении задания 45. Нарисуйте траекторию полета камня. Для этого достаточно, чтобы камень оставлял за собой следы в виде точек.
Указание: В задаче говорится о метрах, а на экране расстояние измеряется в твипах. Поэтому вам придется задать масштаб, то есть вообразить, что один твип равен, скажем, одному метру. Тогда высота башни будет равна 100 твипов, а скорость камня — 20 твипов в секунду Правда, картинка на экране в этом случае будет слишком маленькой. Тогда можете задать другой масштаб — 1 метр равен, скажем, 40 твипам. Тогда высота башни будет равна 4000 твипам, а формулы изменятся: s = 40*v*t и h=40*(100 — 9.81*t2/2).
Задание 107 (сложное): Сделайте игру: Пушка на экране стреляет в цель ядрами. С какого выстрела она поразит противника? Между пушкой и целью расположена небольшая гора. Перед началом игры случайно задается горизонтальная координата цели. Затем рисуется картинка.
Перед каждым выстрелом компьютер отображает в текстовом поле номер выстрела и запрашивает у человека стартовую скорость ядра v и угол а наклона ствола пушки к земле. Затем летит ядро. Полет ядра подчиняется двум уравнениям: s=v*t*cosa и h=v*t*sina — 9.81*t2/2 (см. предыдущее задание). Считается, что цель поражена, если ядро ее коснулось, не коснувшись горы. Указание: Вы можете запрограммировать автоматическое определение попадания в цель. Для этого нужно в момент, когда ядро при падении пересекло уровень земли, сравнить горизонтальные координаты ядра и цели. Если они достаточно близки, то фиксируйте попадание. Определение прикосновения к горе — более хлопотное занятие, но идея та же.
"Движем" свойства объектов
Сделаем рекламный ролик: Из черной глубины экрана на нас наплывают, увеличиваясь, красные слова "Съешьте Марс!"
Покрасим форму. Поместим на форму метку и сделаем ее большой и прозрачной. Придадим ее свойству Caption значение нужного текста. Сменим название шрифта на "Times" или какой-нибудь другой красивый, настроим стиль и цвет шрифта. Программа:
Private Sub Timer1_Timer()
Label1.FontSize = Label1.FontSize + 1
End Sub
Задание 108: Пусть текст также непрерывно меняет цвет.
Пусть теперь на нас надвигается, увеличиваясь в размерах, фото. Для этого придадим это фото объекту Image. Установив в True его свойство Strech, будем увеличивать размеры объекта, стараясь сохранять его пропорции:
Private Sub Timer1_Timer()
Image1.Width = Image1.Width + 10
Image1.Height = Image1.Height + 7
End Sub
Таким образом можно оживлять объект, меняя любое его свойство, имеющее численное значение.
Мультфильм
Когда мы снимаем видеокамерой идущего человека, то на разных кадрах у него разное положение ног. Когда мультипликаторы на студии создают мультик с идущим