|

Программирование графики
Xakep, номер #043, стр. 043-066-1
Улучшенные спрайты
Horrific aka Фленов Михаил (smirnandr@mail.ru) www.cydsoft.com/vr-online
Наши знания уже дошли до такого уровня, что мы готовы создавать простые в использовании демки на основе спрайтов. Единственное, чего нам не хватает, так это прозрачности. Пока что я показал, как полностью вывести спрайт. Но чаще всего нужно использовать при выводе прозрачность, чтобы одна картинка накладывалась поверх другой.
Теория
Допустим, что у нас есть две картинки, показанные на рисунке 1 и на рисунке 2. Изображение первого рисунка мы уже использовали в наших прогах в качестве фона и сегодня оно будет выполнять ту же функцию. Изображение на втором рисунке мы сегодня выведем поверх фона. При этом нам надо вывести только самолет, а цвет фона должен быть проигнорирован.
Задача достаточно простая, но в то же время требует немного дополнительных усилий. В DirectDraw она решается следующим образом:
1. После загрузки изображения в поверхность надо указать, какой цвет должен быть прозрачным.
2. Во время вывода поверхности с изображением на экран указать, что при выводе надо учитывать цвет прозрачности. При этом из поверхности изображения будет копироваться все, кроме цвета прозрачности, т.е. только самолет.
Шкодинг
Загружай пример, описанный в прошлом номере Х, сейчас мы его подкорректируем. Я больше не буду давать полный исходник примеров, потому что они постоянно растут, а размер журнала остается тем же. Поэтому здесь будет только описание, а исходник будет выкладываться на моем сайте или на диске к этому номеру Х.
Для начала заведи в разделе var новую переменную поверхности для хранения изображения самолета:
FTransImageSurface : IDirectDrawSurface7;
Теперь найди то место, где мы загружаем картинку фона. После загрузки фона нужно добавить следующие две строчки:
FTransImageSurface := DDLoadBitmap(FDirectDraw, '2.bmp', 0, 0);
DDSetColorKey(FTransImageSurface, RGB(255, 0, 255));
В первой строке я загружаю картинку с именем 2.bmp в поверхность FTransImageSurface. Процесс такой же, как и при загрузке фона, поэтому тут не должно быть вопросов. Я только напомню, что картинка 2.bmp должна находиться в той же директории, что и прога, иначе нужно указывать полный или относительный путь к файлу.
Во второй строке этого кода я указываю для поверхности FTransImageSurface цвет прозрачности с помощью функции DDSetColorKey. У нее два параметра:
1. Поверхность, у которой надо установить цвет прозрачности. Нам надо здесь указать FTransImageSurface.
2. Значение цвета, который будет использоваться в качестве прозрачного. Чтобы указать цвет, я использую функцию RGB(Красный, Зеленый, Синий). У этой функции три параметра, которые указывают красную, зеленую и синюю составляющую цвета. Каждая составляющая изменяется от 0 до 255. Если у тебя в качестве прозрачности используется красный цвет, то нужно указать RGB(255, 0, 0).
Лично я люблю использовать цвет со значениями RGB(255, 0, 255).
Уроки рисования
Картинка загружена и уже указан цвет, который будет использоваться в качестве прозрачного. Теперь нам осталось только вывести ее на экран.
Содержание Вперед на стр. 043-066-2
|