Это не подробное руководство по DirectX, а объяснение того, как использовать DELPHI для разработки игр DirectX. Поскольку книги о DirectX, как в Интернете, так и в книжных магазинах, в основном описывают их на C++ или VC. Информация об использовании DELPHI для разработки игр. Совсем немного, цель этой статьи — дать читателям возможность научиться использовать существующую информацию для изучения и разработки игр.
Эта статья предназначена для читателей, которые имеют определенное представление о DirectX, но не знают, как разрабатывать игры DirectX под DELPHI.
Рекомендуемые справочные материалы:
<<Руководство по программированию игр>>,<<Китайская коллекция DirectX>>
Может ли DELPHI разрабатывать игры?
Ответ: конечно, многие люди на многих форумах по онлайн-играм считают, что для разработки игр можно использовать только C++ или VC. DELPHI подходит только для настольных приложений. Людям с такими взглядами рекомендуется разобрать и посмотреть код, скомпилированный DELPHI и VC, или посмотреть игру «Age of Miracles», разработанную с помощью DELPHI. Скорость. и графика лучше, чем у Age of Empires.DELP HI полностью объектно-ориентирован, может встраивать ассемблер и поддерживает инструкции MMX (регистры MMX в DELPHI — mm0-mm7). Фактически, независимо от VC, DELPHI — это всего лишь инструмент. Если у вас есть хорошие внутренние навыки, вы можете сделать хорошую программу или игру.
Подготовка:
В настоящее время существует два варианта разработки игр DirectX с помощью DELPHI. Один — использовать декларацию DirectX jedi (http://www.delphi-jedi.org). Второй — использовать элементы управления DelphiX. Здесь мы собираемся использовать DirectX от jedi. Пакет объявлений X используется для разработки игр DirectX. Причина, по которой я выбираю пакет объявлений DirectX, заключается в том, что он использует метод SDK для разработки игр. Если в будущем мне понадобится переключиться на другие языки, мне не придется это делать. переучиваем DirectX. Что касается элемента управления DelphiX, то я им никогда не пользовался и не имею права голоса. Но японскими продуктами не пользуюсь ;-)
Сначала перейдите по следующему адресу, чтобы загрузить пакет декларации DirectX (http://kuga.51.net/download/files/directx7.rar), и извлеките его в свой собственный каталог. Затем выберите «Инструменты» -> «Параметры среды» в DELPHI. Выберите вкладку «Библиотека» в открывшемся окне и нажмите кнопку под «Путь к библиотеке». Появится окно «Каталоги», затем нажмите «Недействительные элементы, выделенные серым цветом». Кнопка справа от пути. Выберите каталог, в который будет извлечено объявление DirectX. Затем нажмите кнопку «ДОБАВИТЬ», чтобы добавить каталог, в котором находится объявление DirectX, в путь к библиотеке DELPHI. Вы можете напрямую ссылаться на модуль в объявлении DirectX. in Uses. Это объявление В комплект поставки входит несколько примеров, которые можно использовать в качестве справочного материала для начала работы.
Опыт отладки:
При разработке полноэкранной игры лучше всего установить разрешение экрана во время проектирования на то же разрешение, что и в игре, чтобы избежать повреждения экрана из-за частого переключения разрешения во время отладки.
Лучше всего разрабатывать полноэкранные игры под WIN2000/XP. В противном случае при отладке под 98 игра войдет в бесконечный цикл или возникнет исключение. Когда полноэкранная игра входит в бесконечный цикл, машина легко выйдет из строя. под 2000/XP вы можете нажать ALT+TAB, чтобы перейти к DELPHI (но в настоящее время Поскольку игры DirectX полноэкранные и занимают весь экран, изменений на экране не произойдет, поэтому нужно попробовать еще несколько раз). Нажмите CTRL+F2, чтобы завершить игру. Если это ненормально, переключитесь на DELPHI и. сначала нажмите Enter, а затем нажмите CTRL+F2, чтобы завершить игру отладки.
Уведомление:
Если вы используете DELPHI7, измените строку 145 {$IFDEF VER140} в DirectDraw.pas на {$IFDEF VER150} для нормальной компиляции и интерпретации.
Для создания главного окна игры лучше использовать API, а не класс TFORM VCL.
Сначала давайте взглянем на фрагмент кода, который инициализирует объект DirectDraw с использованием C++ и DELPHI.
версия С++:
BOOL InitDDraw( )
{
LPDIRECTDRAW7 lpDD; //Указатель на объект DirectDraw;
if (DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK )
вернуть ЛОЖЬ {Создать объект DirectDraw};
{Для обнаружения ошибок используется метод if (xxx != DD_OK), который является наиболее часто используемым методом}
if (lpDD->SetCoOperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK )
return FALSE {Установить уровень управления DirectDraw};
if ( lpDD->SetDisplayMode( 640, 480, 32, 0, DDSDM_STANDARDVGAMODE) != DD_OK)
вернуть ЛОЖЬ {установить режим отображения};
}
ДЕЛЬФИ-версия:
функция TForm1.InitDirectDraw: логическое значение;
вар
lpDD: IDirectDraw7;
начинать
Результат: = False; {Предположим, инициализация не удалась}
{Создать объект DirectDraw}
если DirectDrawCreateEx(nil, lpDD, IID_IDIRECTDRAW7, nil) <> DD_OK, то
Выход;
{Установите уровень управления DirectDraw. Первый параметр — это дескриптор окна DirectDraw. Здесь уровень управления установлен на полноэкранный режим и монопольный режим}.
если lpDD.SetCooperativeLevel(Hwnd, DDSCL_EXCLUSIVE или DDSCL_FULLSCREEN) <> DD_OK, то
Выход;
{Установите режим отображения. Первый и второй параметры — разрешение. Третий параметр используется для установки количества цветных цифр в режиме отображения.
Четвертый параметр устанавливает частоту обновления экрана. 0 — значение по умолчанию. Единственное допустимое значение четвертого параметра — DDSDM_STANDARDVGAMODE}.
если lpDD.SetDisplayMode(640, 480, 32, 0, DDSDM_STANDARDVGAMODE) <> DD_OK, то
Выход;
Результат:= Истина;
конец;
Видно, что эти два фрагмента кода абсолютно одинаковы, за исключением синтаксиса и имен объектов. Поняв это, мы можем обращаться к информации VC или C++, а затем использовать DELPHI для создания собственных объектов. Объявление DirectX в DELPHI. Имя, имя структуры и VC различны. Общее соответствие следующее:
ДЕЛЬФИ ВК
Объект DirectDrawIDirectDraw7 LPDIRECTDRAW7
Объект страницы IDirectDrawSurface7 LPDIRECTDRAWSURFACE7
Описание страницы DirectDraw TDDSurfaceDesc2 DDSURFACEDESC2
В основном отличаются только префиксы. Из-за места здесь перечислены не все объекты и структуры.