| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
| ||||||||||||||||
![]() |
Часть пятая: DirectDraw в окне Итак, скорее всего это будет заключительная часть моего учебника. Но это не значит, что изучение DirectDraw заканчивается! Я еще не расказал о тайлах, скроллинге, изометрии и тому подобных вещах, но это ведь уже будут не "Основы". Все, что каксается "продвинутого" программирования DirectDraw я буду выпускать отдельными статьями, так что заходите на сайт почаще! Немножко теории Чаще всего DD используется в полноэкранном режиме, так как только в нем мы можем использовать большинство функций работы с видеокартой. Однако, вам может понадобиться использование DirectDraw в окне. Все-таки как ни крути, DirectDraw даже в окне работает быстрее, чем BitBlt и другие "рисовательные" API функции, не говоря уже о методах PaintPicture и им подобных.
Чуть-чуть больше об объекте клиппер. Когда вы рисуете какой-то спрайт и он частично уходит за пределы видимой области, DirectDraw, вместо того, чтобы выдавать ошибку, просто прекращает рисовать весь спрайт и на экране вы видите, что он пропадает. К счастью для оконного режима, в нем DirectDraw позволяет использовать объект DirectDrawClipper, который действует по принципу детской формочки - он накладывается на определенный участок, например на PictureBox, а затем, все изображения, которые помещаются в этот PictureBox обрезаются об края клиппера и остаюется только то, что внутри него. Ну вот - полная песочница! Объявляется и создается клиппер следующим образом:
Ну вот, примерно так вы будете создавать клиппер в ваших приложениях. Но учтите, что в полноэкранном режиме, объект клиппер не работает! Вам придется обрезать спрайты, выходящие за границы экрана, вручную. Немножко попишем Ладно, с теорией, я надеюсь, разобрались. Переходим к созданию приложений. Мы обновим наш модуль mdlDirectDraw7 и добавим в него новую функцию для создания DirectDraw в окне. Сначала, поместите в модуль новое объявление:
Теперь, примемся за саму функцию:
Отлично! С модулем покончено (ну в смысле закончено... ну вы меня поняли...) Теперь напишем программу, которая будет выводить в окне спрайт, и с изменением размеров формы, размер спрайта также будет меняться. Создайте проект, если вы его еще не создали и нарисуйте форму frmMain. Далее, внесите в модуль кода формы следующий код:
При загрузке формы будет происходить инициализация, но не будет начинаться рисование. Процедура рисования будет вызываться при событиях формы Paint (чтобы перерисовывать спрайт, когда форма перекрывается другим окном, уходит за пределы экрана и т.п.), а также Resize (ну это понятно - чтобы менять размеры спрайта вместе с формой).
Я думаю, вы уже догадались, что Run - это процедура рисования. А вот и она сама:
Готово! Запускайте программу (конечно вам еще понадобится картинка с соответствующими размерами (у меня 350x279)) и попробуйте поменять размеры формы, перекрывать ее другими окнами, частично вытаскивать за пределы экрана. Картинка на форме должна постоянно обновляться. В этом примере нет анимации. Я приготовил для вас еще один пример - с анимацией, но различия там скорее только технические и к DirectDraw относятся мало, поэтому я предлагаю вам его просто скачать. Посмотрите в "приложении" к этой главе. [Назад] |
|
![]() | ||||||||||||||||
| ||||||||||||||||
![]() | ||||||||||||||||
|