Чтение онлайн

на главную - закладки

Жанры

Графика DirectX в Delphi

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

Шрифт:

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

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

< image l:href="#"/>

По

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

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);

Map2.WrapScrollUp(MapScrollSpeed);

МарЗ.WrapScrollUp(MapScrollSpeed);

Map4.WrapScrollUp(MapScrollSpeed);

end;

if KeyDown(DIK_DOWN) then begin // Стрелка вниз

Mapl.WrapScrollDown(MapScrollSpeed);

Map2.WrapScrollDown(MapScrollSpeed);

МарЗ.WrapScrollDown(MapScrollSpeed);

Map4.WrapScrollDown(MapScrollSpeed); end; if KeyDown(DIK_ESCAPE) then begin // Выход

GameScreen.FadeTo(255, 255, 255, 0); // Эффект угасания

GameScreen.FadeOut(4) ;

f rmDD.Close;

end;

end;

Обрабатывается нажатие нескольких клавиш одновременно, образы можно передвигать по диагонали.

Вывод осуществляется в задний буфер, каждая карта отсекается по своему сектору:

function TfrmDD.UpdateFrame : HRESULT;

var

Windowl : TRECT; // Секторы окна

Window2 : TRECT;

Windows : TRECT;

Window4 : TRECT;

begin

SetRect (Windowl, 0, 0, 320, 240) ; // Четыре равные части экрана

SetRect (Window2, 320, 0, 640, 240);

SetRect (Window3, 0, 240, 640, 480); SetRect (Window4, 320, 240, 640, 480);

GameInput.Update; // Обновить данные о клавиатуре

OpdateKeys; // Обслужить нажатые клавиши

// Вывод в задний кадр четырех карт, отсекаемых по секторам

Map1.DrawClipped(GameScreen.GetAppBackBuffer, Windowl);

Map2.DrawClipped(GameScreen.GetAppBackBuffer, Window2);

МарЗ.DrawClipped(GameScreen.GetAppBackBuffer, Window3);

Map4.DrawClipped(GameScreen.GetAppBackBuffer, Window4);

Result := GameScreen.Flip; // Переключение страниц

end;

Для восстановления поверхностей используется метод Restore.

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

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

Свадьба по приказу, или Моя непокорная княжна

Чернованова Валерия Михайловна
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Свадьба по приказу, или Моя непокорная княжна

Сборник коротких эротических рассказов

Коллектив авторов
Любовные романы:
эро литература
love action
7.25
рейтинг книги
Сборник коротких эротических рассказов

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Вадбольский

Никитин Юрий Александрович
1. Вадбольский
Фантастика:
попаданцы
5.00
рейтинг книги
Вадбольский

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Повелитель механического легиона. Том VIII

Лисицин Евгений
8. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VIII

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Таня Гроттер и магический контрабас

Емец Дмитрий Александрович
1. Таня Гроттер
Фантастика:
фэнтези
8.52
рейтинг книги
Таня Гроттер и магический контрабас

Бастард Императора. Том 2

Орлов Андрей Юрьевич
2. Бастард Императора
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бастард Императора. Том 2

Кодекс Крови. Книга ХI

Борзых М.
11. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХI

Третий

INDIGO
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Потусторонний. Книга 1

Погуляй Юрий Александрович
1. Господин Артемьев
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Потусторонний. Книга 1