|

Программирование графики
Вывод спрайтов
Xakep, номер #041, стр. 041-077-3
Сегодня мы познакомимся с одной из возможностей функции Blt - очистка экрана. Для этого в структуре bltfx надо заполнить только два значения - dwSize (размер структуры заполняется всегда) и dwFillColor (цвет заливки).
Когда структура готова, можно вызывать функцию (точнее сказать, даже метод объекта поверхности) Blt. У метода есть 5 параметров:
1. Область приемника, на которой надо рисовать (если nil, то рисуется на всей поверхности).
2. Поверхность источника (мы не копируем поверхность, а только закрашиваем, поэтому у меня nil).
3. Область источника, которая должна скопироваться (если nil, то копируется вся поверхность).
4. Флаги, которыми указывается, что должна сделать функция. Здесь я указываю DDBLT_COLORFILL - указывает на необходимость закрасить выбранную область указанным цветом. А также DDBLT_WAIT - указывает на то, что если вывод сейчас невозможен, то подождать.
5. Структура, в которой хранятся необходимые параметры, в данном случае цвет заливки.
Среди параметров есть размеры источника и приемника (откуда копируем и куда), а вот поверхность указывается только источника. Из-за этого может возникнуть вопрос: "А куда происходит копирование?". Все очень просто, копироваться будет в ту поверхность, которая вызвала этот метод, в данном случае в первичную (FPrimarySurface.Blt).
После выполнения этой функции наша первичная поверхность (FprimarySurface) очищается черным цветом. Теперь мы готовы перенести наше изображение из поверхности FimageSurface на первичную.
Если ты внимательно посмотрел на параметры метода Blt, то, наверно, заметил, что с помощью нее можно и копировать поверхности. Для этого в качестве второго параметра нужно только указать копируемую поверхность. Но я воспользовался более простой и более быстрой реализацией BltFast. Но это уже совершенно другая история, с которой мы разберемся в следующий раз.
Shutdown
На этом сегодняшний пример можно закончить. В следующий раз я продолжу рассказ про вывод изображений на экран, потому что тут есть очень много интересных и хитрых приемов.
Исходники примера, как всегда, можно скачать с моего сайта www.cydsoft.com/vr-online после выхода этого номера в свет.
P.S. У меня к тебе просьба, на сто баксов :). Не пиши мне большие письма. После появления рубрики "кодинг" меня каждый день валят вопросами. Я не в состоянии всем рассказывать то, о чем пишут книги. Я могу что-то подсказать, где-то помочь, но не больше. А просьбы типа помоги написать прогу - вообще нереальны. Я отвечаю только на те вопросы, где ответ займет несколько строчек. Целые лекции по мылу я разводить не могу. Я бы с удовольствием помог всем, но это НЕВОЗМОЖНО. Вас слишком много, а я один :(((. Поэтому лучше разбей свой вопрос на несколько маленьких и спрашивай постепенно, а не все сразу.
Назад на стр. 041-077-2 Содержание
|