Вход/Регистрация
Графика DirectX в Delphi
вернуться

Краснов Михаил

Шрифт:

// Устанавливаем текущей палитру, образованную элементами массива

FDDPal.SetEntries(0, 0, 256, @PalEntries);

Timer := (Timer + 1) mod 100;

// Восстанавливаем первоначальную палитру

if Timer = 0 then FDDpal.SetEntries(0, 0, 256, @DefPal);

Эффект угасания часто применяется для необычного завершения работы приложения.

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

Рассмотрим простейший пример на эту тему - проект каталога Ех24. Фон представляет собой рисунок, построенный серией эллипсов, нарисованных оттенками серого; цвета повторяются в каждой серии (рис. 3.12).

Равномерно удаленные компоненты палитры с течением времени последовательно заменяются желтоватым цветом, остальные элементы ее затемняются. На экране по очереди появляются близко расположенные окружности и возникает иллюзия их движения.

Целочисленная переменная kr задает текущую незатемняемую палитру и изменяется от шестнадцати до двух, уменьшаясь на каждом шаге:

function TfrmDD.UpdateFrame : HRESULT;

var

k : Integer;

DefPal : Array[0..255] of TPaletteEntry; // Массив цветов палитры

hRet : HRESULT;

begin

ThisTickCount := GetTickCount;

if ThisTickCount - LastTickCount > 10 then begin

// Берем текущую палитру

hRet := FDDPal.GetEntries(0, 0, 256, SDefPal);

if Failed (hRet) then begin Result := hRet;

Exit;

end;

for k := 0 to 14 do begin // Затемняем предыдущий цвет палитры

DefPal [kr * 15 + k].peBlue := 0;

DefPal [kr * 15 + k].peRed := 0;

DefPal [kr * 15 + k].peGreen := 0;

end;

Dec (kr); // Переходим к следующему цвету палитры

if kr < 2 then kr := 16;

for k := 0 to 14 do begin // Подменяем текущий цвет желтоватым

DefPal [kr * 15 + k].peBlue := 0;

DefPal [kr * 15 + k].peRed :== 128;

DefPal [kr * 15 + k].peGreen := 100;

end;

// Устанавливаем измененную палитру

hRet := FDDPal.SetEntries(0, 0, 256, @DefPal);

if Failed (hRet) then begin Result := hRet;

Exit;

end;

LastTickCount := GetTickCount;

hRet := FDDSPrimary.Flip(nil, DDFLIP_WAIT);

if Failed (hRet) then begin Result := hRet;

Exit;

end;

end;

Result := DD_OK;

end;

Обратите внимание, что при запуске и восстановлении приложения появляется первоначальная фоновая картинка, поскольку затеняются "ненужные" цвета палитры только после первого прохождения значения kr по кругу.

Оконные приложения

Вы, должно быть, уже привыкли к тому, что наши примеры работают в полноэкранном режиме. Обычно оконные приложения создаются в DirectDraw только в случае крайней необходимости, т. к. слишком многое мы теряем при его использовании. Главная потеря здесь - скорость работы приложения.

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

Для оконных приложений нельзя использовать переключение страниц или двойную буферизацию.

По своей сути, оконные приложения похожи на наши самые первые примеры, с выводом кружка на поверхности окна. Точно так же первичной поверхностью является весь рабочий стол экрана, и приложение должно отслеживать положение окна.

Рассмотрим простейший пример, располагающийся в каталоге Ех25. Работа его совсем проста, в пределах окна выводится хорошо нам знакомый растр с горным пейзажем.

Свойство Borderstyle формы приняло теперь свое обычное значение bssizeabie, удалены единственный компонент и все, связанное с курсором. Не можем мы также здесь задавать параметры экрана и устанавливать исключительный уровень кооперации, поскольку для оконных приложений задается обычный уровень доступа:

hRet := FDD.SetCooperativeLevel(Handle, DDSCL_NORMAL);

  • Читать дальше
  • 1
  • ...
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: