[введение]
Хочу сказать сразу: PaintPicture - это самый медленный способ анимировать
спрайты. Однако, он довольно легок для изучения. Из-за этого лучше всего
начать с него. Потом в вашей работе, вам потребуется изучение BitBlt и
DirectDraw - все это вы сможете найти на этом сайте. PaintPicture - это
"родная" команда VB для манипулирования растровыми изображениями.
PaintPicture использует ту же часть GDI32 API, что и BitBlt, но гораздо
медленнее. Это происходит из-за того, что PaintPicture через несколько команд
закапывается все в более низкие уровни системы. Вы вызываете PaintPicture,
она в свою очередь GDI32, затем команды передаются драйверу видеокарты и т.д.
[форма]
Picture1: ScaleMode=Pixel Width=7000
Height=5000
PictureClip1: Rows=2
Timer1: Enabled=False Interval=80
Command1: Caption=Start
[программа]
Private Sub Form_Load
PictureClip1.Picture = LoadPicture(app.path &
"\circle.bmp")
End Sub
Private Sub Command1_Click
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer
Picture1.Refresh
If X >= 460 Then X = 0
Picture1.PaintPicture PictureClip1.GraphicCell(1), X, 100, , , , , , ,
vbSrcAnd
Picture1.PaintPicture PictureClip1.GraphicCell(0), X, 100, , , , , , ,
vbSrcInvert
X = X + 25
End Sub
Объясню , что здесь проиходит . Все очень просто: когда таймер
начинает работать, картинка постоянно обновляется. Эта команда:
Picture1.PaintPicture PictureClip1.GraphicCell(1), X, 100, , , , , , ,
vbSrcAnd
рисует маску картинки и сливает вместе точки, стирая что было до этого.
Часть GraphicCell просто указывает точки, по которым ориентируемся в
PictureClip; в этот раз вторая секция (начинается с 0). Следующая команда
PaintPicture:
Picture1.PaintPicture PictureClip1.GraphicCell(0), X, 100, , , , , , ,
vbSrcInvert
Рисует картинку на элементе PictureBox. Очень просто. Теперь,
попробуйте выполнить этот код и смотрите за работой PaintPicture. Очень,
очень медленно. Вот зачем вам просто необходимо изучить далее BitBlt. BitBlt
гораздо быстрее, почти в 5 раз.
Не бойтесь экспериментировать с этой программой. Попробуйте отображать
больше картинок в одно и то же время. Не забудьте выравнивать Строки и
Столбцы элемента PictureClip. Вы также можете использовать цикл вместо
таймера, а также использовать буфферизацию. Собирайте сцену на невидимом
PictureBox, а затем копируйте ее на главный элемент.
|