Читаем Графика DirectX в Delphi полностью

Type := RDH_RECTANGLES;

nCount := 1;

nRgnSize := Sizeof(TRECT);

end;

PRECT(@rgn.Buffer)Л := wrk;

if FDD.CreateClipper(0, FDDClipper, nil) = DD_OK then begin

FDDClipper.SetClipList (@rgn, 0);

FDDSBac k.SetClipper(FDDC1ippe r);

end;

При перерисовке кадра образ курсора растягивается на величину Scale:

function TfrmDD.UpdateFrame : HRESULT;

var

hRet : HRESULT;

wrkRect : TRECT;

begin

// Вывод фона

hRet := FDDSBack.Blt (nil, FDDSBackGround, nil, DDBLT WAIT, nil);

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

// Прямоугольник области образа курсора

SetRect (wrkRect, mouseX, mouseY, mouseX + Scale, mouseY + Scale);

// Масштабирование образа курсора, используется цветовой ключ

hRet := FDDSBack.Blt (SwrkRect, FDDSImage, nil, DDBLT_WAIT or

DDBLT_fCEYSRC, nil) ; if Failed (hRet) then begin

Result := hRet;

Exit;

end;

Result := FDDSPrimary.Flip(nil, DDFLIP_WAIT)

end;

Библиотека CDX

Наверняка многие из читателей этой книги захотят создать собственную вспомогательную библиотеку, облегчающую программирование приложений на основе DirectDraw. Прежде чем приступать к этому мероприятию, стоит познакомиться с уже готовыми решениями. В данном разделе вас ждет краткий экскурс по функциям очень популярной библиотеки CDX, реализованной по лицензии GNU. Библиотека написана на С, и я перевел на Delphi лишь небольшую ее часть, а полностью библиотеку вы можете получить по адресу http://www.cdx.sk/.

Начнем с проекта каталога Ех13, простейшего примера, выводящего на экране по ходу своей работы разноцветные прямоугольники (рис. 5.13).

В списке uses добавилось подключение модуля coxscreenx, а перечень переменных, связанных с графикой, совсем короткий:

GameScreen : CDXScreen;

Вообще, код сильно упрощается, а инициализация графики сведена к одному оператору:

GameScreen := CDXScreen.CreateCDXScreenCustomBPP(Handle, ScreenWidth,

ScreenHeight, ScreenBitDepth);

Код перерисовки окна также состоит из одного действия:

GameScreen.GetAppFrontBuffer.Rect(random(ScreenWidth),

random(ScreenHeight),

random(ScreenWidth),

random(ScreenHeight),

random(254));

To есть, рисуем очередной прямоугольник прямо на переднем буфере.

Работа приложения завершается после нажатия любой клавиши. По окончании работы приложения удаляется наш единственный объект:

if Assigned (GameScreen) then GameScreen.Destroy;

Подход, предлагаемый CDX, вам сильно напомнит то, что мы встречали в реализации модуля DDUtil для восьмой версии DirectX, но исторически первой появилась CDX. Библиотека специально предназначена для разработки игр и охватывает не только DirectDraw, но и все остальные модули DirectX.

Следующий пример, проект каталога Ех14, иллюстрирует некоторые моменты работы с фоном. Экран разбит на четыре части, в каждой из которых выводится своя фоновая картинка (рис. 5.14).

По нажатии клавиш управления курсором ландшафт в каждом секторе циклически сдвигается. В программе появились дополнительные переменные, связанные с фоном и обработкой клавиатуры:

Gamelnput : CDXInput; // Объект, связанный с вводом

GameScreen : CDXScreen; // Главный объект вывода

Landscape : CDXTile; // Загружаемая картинка

Mapl : CDXMap; // Секторы, отдельные окна экрана

Мар2 : CDXMap;

МарЗ : CDXMap;

Мар4 : CDXMap;

MapScrollSpeed : Integer = 4; // Скорость передвижения фона

К Зафужаемая картинка объединяет четыре шаблона заполнения окна, каждый имеет размеры 64x64 пикселов:

procedure ТfrmDD.FormCreate(Sender: TObject);

begin

Gamelnput := CDXInput.CreateCDXInput; // Инициализация ввода

Gamelnput.Create(HInstance, Handle);

GameScreen := CDXScreen.CreateCDXScreenCustomBPP(Handle, ScreenWidth, ScreenHeight, ScreenBitDepth);

GameScreen.LoadPalette('Anim.bmp1); // Палитровый режим

// Загрузка картинки с 4-мя шаблонами заполнения экрана, 64x64 пиксела

Landscape := CDXTile.CDXTileCustom(GameScreen,'Anim.bmp',64, 64, 4);

// Создаем четыре схемы заполнения фона

Mapl := CDXMap.CDXMap(Landscape, GameScreen);

Mapl.CreateMap(64, 64, 1);

Map2 := CDXMap.CDXMap(Landscape, GameScreen);

Map2.CreateMap(64, 64, 2) ;

МарЗ := CDXMap.CDXMap(Landscape, GameScreen);

Map3.CreateMap(64, 64, 3);

Map4 := CDXMap. CDXMap (Landscape, GameScreen);

Map4.CreateMap(64, 64, 4);

end;

Поскольку нумерация шаблонов основана на нуле, в картинки включают дополнительный, неиспользуемый фон, идущий первым.

Код обработки клавиш легко читается, смысл всех действий вам должен быть понятен:

function KeyDown (Key : Byte): BOOL; // Вспомогательная функция

begin

Result := Gamelnput.Keys[Key] = 128; // Нажата ли клавиша

end;

procedure UpdateKeys; // Процедура обработки клавиатуры

begin

if KeyDown(DIK_RIGHT) then begin // Стрелка вправо

Mapl.WrapScrollRight(MapScrollSpeed); // Сдвиг вправо содержимого

Map2.WrapScrollRight(MapScrollSpeed); // Всех четырех окон

МарЗ.WrapScrollRight(MapScrollSpeed);

Мар4.WrapScrollRight(MapScrollSpeed);

end;

if KeyDown(DIK_LEFT) then begin // Стрелка влево

Mapl.WrapScrollLeft(MapScrollSpeed);

Map2.WrapScrollLeft(MapScrollSpeed);

МарЗ.WrapScrollLeft(MapScrollSpeed);

Map4.WrapScrollLeft(MapScrollSpeed);

end;

if KeyDown(DIK_UP) then begin // Стрелка вверх

Mapl.WrapScrollUp(MapScrollSpeed);

Перейти на страницу:

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
Adobe InDesign CS3
Adobe InDesign CS3

Книга посвящена верстке и макетированию в программе Adobe InDesign CS3. Помимо того что в ней описываются возможности программы, рассматриваются также принципы и традиции верстки, приводятся примеры решения типичных задач. Все это позволит читателю не только овладеть богатым инструментарием программы, но и грамотно применять его.Материал книги разделен на логические части: теоретические сведения, инструментарий программы, решение задач, – а также рассчитан на два уровня подготовки читателей – начинающих и опытных пользователей, что выгодно отличает книгу от других изданий. Это позволит применять ее как новичкам для знакомства с программой, так и пользователям со стажем для пополнения своих знаний.

Владимир Гавриилович Завгородний , Владимир Завгородний

Программирование, программы, базы данных / Программное обеспечение / Книги по IT
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных