1. Считать и запоминать фоновое изображение из прямоугольной области, положение которой на экране определяется текущими координатами спрайта.
2. Отобразить в этой области спрайт.
3. Выдержать паузу.
4. Восстановить фоновое изображение.
5. Вычислить новые координаты спрайта.
Впрочем, при использовании операции XOR, можно и не запоминать фон. В этом случае последовательность действий будет несколько иной:
1. Вывести на экран спрайт в режиме R2_X0RPEN.
2. Выдержать паузу.
3. Для восстановления фона отобразить спрайт в том же месте еще раз.
4. Вычислить новые координаты спрайта.
Недостатком такого приема является смешивание изображения спрайта с подстилающей картинкой при выполнении первого пункта. В настоящее время эта методика не используется. Во-первых, значительно возросла скорость процессора, а во-вторых, некоторые современные графические адаптеры предоставляют аппаратную поддержку спрайтов. Спрайт хранится в отдельном участке видеопамяти (так называемой оверлейной поверхности) и автоматически накладывается на фоновое изображение в процессе формирования видеосигнала.
Для движения непрямоугольных картинок в GDI предусмотрено применение цветового ключа, то есть цвета, который программист назначает прозрачным. В проектах SpriteMask и SpriteTransparent показаны различные варианты организации движения картинок с прозрачным фоном В проекте SpriteMask используются растровые операции с основным изображением картинки на черном фоне и маской рисунка, которая выглядит как черный силуэт на белом фоне. Краткое изложение алгоритма работы этого решения приведено в следующем списке:
1. Функцией BitBltO с растровой операцией SRCC0PY сохраняется в отдельном контексте фоновое изображение под спрайтом.
2. На экран выводится черный силуэт при помощи копирования маски с применением растровой операции SRCAND. В этом случае изображение под белым фоном не изменится.
3. В силуэт вписывается картинка с использованием операции SRCPAINT. Изображение под черным фоном не изменится.