1. Считать и запоминать фоновое изображение из прямоугольной области, положение которой на экране определяется текущими координатами спрайта.

2. Отобразить в этой области спрайт.

3. Выдержать паузу.

4. Восстановить фоновое изображение.

5. Вычислить новые координаты спрайта.

Впрочем, при использовании операции XOR, можно и не запоминать фон. В этом случае последовательность действий будет несколько иной:

1. Вывести на экран спрайт в режиме R2_X0RPEN.

2. Выдержать паузу.

3. Для восстановления фона отобразить спрайт в том же месте еще раз.

4. Вычислить новые координаты спрайта.

Недостатком такого приема является смешивание изображения спрайта с подстилающей картинкой при выполнении первого пункта. В настоящее время эта методика не используется. Во-первых, значительно возросла скорость процессора, а во-вторых, некоторые современные графические адаптеры предоставляют аппаратную поддержку спрайтов. Спрайт хранится в отдельном участке видеопамяти (так называемой оверлейной поверхности) и автоматически накладывается на фоновое изображение в процессе формирования видеосигнала.

Для движения непрямоугольных картинок в GDI предусмотрено применение цветового ключа, то есть цвета, который программист назначает прозрачным. В проектах SpriteMask и SpriteTransparent показаны различные варианты организации движения картинок с прозрачным фоном В проекте SpriteMask используются растровые операции с основным изображением картинки на черном фоне и маской рисунка, которая выглядит как черный силуэт на белом фоне. Краткое изложение алгоритма работы этого решения приведено в следующем списке:

1. Функцией BitBltO с растровой операцией SRCC0PY сохраняется в отдельном контексте фоновое изображение под спрайтом.

2. На экран выводится черный силуэт при помощи копирования маски с применением растровой операции SRCAND. В этом случае изображение под белым фоном не изменится.

3. В силуэт вписывается картинка с использованием операции SRCPAINT. Изображение под черным фоном не изменится.


⇐ Предыдущая| |Следующая ⇒