Михаил Краснов - Графика DirectX в Delphi

Здесь есть возможность читать онлайн «Михаил Краснов - Графика DirectX в Delphi» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Графика DirectX в Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Графика DirectX в Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Графика DirectX в Delphi — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Графика DirectX в Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать
По нажатии клавиш управления курсором ландшафт в каждом секторе циклически - фото 40

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

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, помогающий постигнуть создание анимации. В качестве фона здесь используются те же круги, что и в предыдущем примере, которые сменяют друг друга на экране.

Существует одна переменная, связанная с фоном, в нее загружаются различные фрагменты растра:

GameMap := CDXMap.CDXMap(Landscape, GameScreen); // Создание лоскута

GameMap.CreateMap(MapSizeX, MapSizeY, 1) ;

GameMap.MoveTo(0, 0) ; Tile := 1;

for i := 0 to 63 do // Цикл заполнения карты

for j := 0 to 62 do begin // разными фрагментами

GameMap.SetTile (i, j, Tile);

Tile := Tile + 1;

if Tile > 4 then Tile := 1;

end;

Через некоторый промежуток времени экран заполняется новым фоном:

var

Delay : Integer =0; // Счетчик кадров

function TfrmDD.UpdateFrame : HRESULT;

var

wrk : TRECT; // Прямоугольник экрана

i, j, Tile : Integer;

begin

Game Input.Update;

UpdateKeys;

SetRect (wrk, 0, 0, ScreenWidth, ScreenHeight);

// Вывести текущее состояние фона

GameMap.DrawClipped (GameScreen.GetAppBackBuffer, wrk);

Inc (Delay);

if Delay > 40 then begin // Прошло 40 кадров

for i := 0 to 62 do

for j := 0 to 62 do begin

Tile := GaraeMap.GetTile(i, j); // Получить номер фрагмента

Inc (Tile); // Циклический сдвинуть в цепочке фрагментов

if Tile > 4 then Tile := 1;

GameMap.SetTile(i, j, Tile); // Задать новый фрагмент

end;

Delay := 0;

end;

Result := GameScreen.Flip;

end;

Код обработки клавиатуры в примере заметно короче по сравнению с предыдущим:

procedure UpdateKeys;

begin

if KeyDown(DIK_RIGHT) then GameMap.WrapScrollRight(MapScrollSpeed);

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Графика DirectX в Delphi»

Представляем Вашему вниманию похожие книги на «Графика DirectX в Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Графика DirectX в Delphi»

Обсуждение, отзывы о книге «Графика DirectX в Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x