PaintPicture - это самый медленный способ анимировать спрайты. Однако, он довольно легок для изучения.

[введение] Хочу сказать сразу: 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, а затем копируйте ее на главный элемент.

 

Hosted by uCoz