[Главная]
|
[Новости] |
[Статьи] |
[Проекты] |
[Автор] |
||
[Все уроки по DirectX] [Уроки по DirectSound8] | ||||||
Открытый проект Дорога в Город (Road To City) ===============================================
Введение
Вашему вниманию предлагается исходный код игры на Delphi 7 с использованием библиотек DelphiX 1.07 (by Jaro Benes) или UnDelphiX под Delphi 7. О том где взять эти библиотеки см. ниже!
Игра
создавалась около года, это первый игровой (пока некоммерческий) проект
автора.
Особенности примера
- Прямая дорога, едущие навстречу и сзади авто, остановки для сбора айта и ремонта, осторожная езда, чтобы не сбить пешехода. - пример создания 2D-игры на Delphi в DelphiX для DirectX7; - игра содержит 10 уровней. - показано движение спрайтов, анимация, скроллинг экрана (сверху-вниз), проверка столкновений для эффекта аварий, сбора ресурсов, остановки возле зданий; - воспроизведение звуков; для музыки используется внешний плеер ModPlug Player; - при помощи инструментов редактирования DelphiX можно посмотреть графическую реализацию графики и анимации - содержимое файлов *.dxg; - если Вы только начинаете изучение DelphiX, то пример послужит Вам хорошим подспорьем как реальный пример игры и того, как реализуется многоуровневость, учет и вывод игровых параметров (ресурсы, очки и т.п.).
Планы развития проекта: - Создание редактора карт; - Разумное поведение других авто на дороге; - Миди-музыка; - Реализация начальной заставки, игрового меню; - Развитие игры; - Учет времени shareware-версии. |
||||||
Путеводитель по исходному коду Основной код приложения реализован в классе TMainForm, остальные типы - производные от TImageSprite и служат для управления игровыми спрайтами - в игре они статичные и анимированные. Тип TGamePaused служит для вывода картинки "Game Paused" во время паузы в игре (по F3); Тип TScrollBackground представляет прокручиваемый фон (трава). Дорога выводится динамически. Класс игрока - TPlayerSprite. Для лучшего понимания работы приложения Road2City необходимо представлять порядок вызова методов класса TMainForm. Он следующий: {методы design time} - при помещении новых компонентов DelphiX на форму приложения добавляется соотвествующий код (автоматически). Однако для нормальной работы компонентов во время runtime необходимо правильно их настроить. Главный компонент вашего приложения, занимающий всю площадь формы - это TDXDraw. Он отвечает за отрисовку графики и инкапсулирует соотвествующие методы DirectX 7. Что значит инкапсулирует? Это значит, что в его составе есть соотвествующие описания методов, а мы их вызываем и используем для своих целей. Некоторые из них вызываются автоматически за счет компонентной природы (TDXDraw происходит от TComponent). Для любой игры на DelphiX Вам потребуются следующие компоненты на форме - TDXDraw, TDXTimer, TDXSpriteEngine, TDXImageList, TDXInput, TDXSound, TDXWaveList и , возможно, некоторые другие (которые Вы найдете в обновленных библиотеках DelphiX). Ядром библиотеки DelphiX является DirectX, поэтому особо не удивляйтесь величию DelphiX. Он только служит оболочкой, описывающей обращение к методам DirectX, а также выполняет некоторые дополнительные (но весьма рутинные) операции типа создания списка изображений, его загрузки, вывода спрайтов. TDXTimer - используется для периодического вызова определенных методов, главным образом метода TDXDraw.Flip без которого просто ничего не появится на экране. TDXDraw.Flip вызывает показ сформированного в буферной памяти кадра игры в предоставленной ему области (окне приложения или на всем экране - в полноэкранном режиме). Установите необходимый интервал времени (свойство Interval), лучше просто - 0 (самый быстрый интервал !) TDXSpriteEngine - отвечает за анимацию, т.е. последовательный вызов метода Move для каждого из принадлежащих ему спрайтов. Свойство TDXSpriteEngine.DXDraw должно содержать ссылку на компонент TDXDraw, иначе не будет анимации! TDXImageList - загрузка списка изображений, их отрисовка. Для свойства DXDraw также укажите ссылку на TDXDraw иначе не будет отрисовки или даже ошибки будут!! TDXInput - ввод от клавиатуры, мышки, джойстика и других устройств ввода. Здесь ничего указывать не требуется, можете только изменить значения клавиш для виртуальных IsButton1-32. Это делается двойным щелчком по компоненту. TDXSound, TDXWaveList - используются для вывода звуков. TDXSound - интерфейс IDirectSound7, а TDXWaveList, то же, что и TDXImageList, но для списка звуков. Следовательно свойство TDXImageList.DXSound должно содержать ссылку на TDXSound. {методы runtime} - рассмотрим что происходит при исполнении нашего приложения. методы TMainForm.FormCreate, FormDestroy, FormClose содержат весь код инициализации, вызываемый при создании/уничтожении формы, закрытии окна приложения. Посмотрев код внутри этих методов Вы увидите что примерно требуется делать при создании/уничтожении окна формы вашей игры. После того, как форма успешно создана/уничтожена происходит дальнейшая работа/завершение работы приложения. Обратите внимание! Я не случайно указал эти методы в паре Создание/Разрушение. Всегда создавая новый объект сразу же прописывайте и соответствующий код разрушения (Destroy, к-ый вызывается ч/з Free). Большинство ошибок начинающих писателей игр связано именно с тем, что забываем создать/уничтожить требуемые объекты!!! Итак, если приложение все-таки заработало, что происходит дальше? Т.к. у нас на форме установлен TDXTimer, то дальше всё основывается на периодически вызываемых методах внутри метода TDXTimer.OnTimer Загляните внутрь него и сами всё увидите!!! Ладно, вообщем в кратце этого достаточно. Остальное я думаю, сможете постигнуть сами! Если Вы настоящие писатели игр или желаете стать таковыми. В этом Вам помогут всевозможные Help'ы по DelphiX и желательно раздобыть по DirectX SDK!!!, исходники и много много терпения и упорства! |
||||||
Для нормальной работы с примером Вам потребуется компонент UnDelphiX. На сегодняшний день в сети существует множество мест, где можно скачать и получить совершенно бесплатно этот компонент. Вот одно из них: http://www.torry.ru/pages.php?id=169 по этим ссылкам вы найдете стартовые странички, с которых можно скачать последние версии компонентов DelphiX и UnDelphiX. |
||||||
Некоторые замечания по поводу работы с DelphiX (и UnDelphiX, далее просто DelphiX, подразумевая все последние обновления и модификации). Когда Вы начнете работу с примером и создание собственного проекта у Вас, естественно будут возникать различные вопросы. Я надеюсь, что упорства Вам не занимать, иначе браться за создание собственной игры лучше и не стоит. Однако вот Вам первое полезное замечание - Если Вы хотите изменить содержимое одного из файлов данных с графикой или звуками - *.dxg или *.dxw поступайте следующим образом: - откройте форму вашего приложения и найдите соответствующий компонент, используемый для работы со списком изображений или списком звуков - DXImageList или DXSoundList; - щелкните по нему правой кнопкой мыши и выберите Open для открытия файла данных, найдите и откройте требуемый файл; - произведите необходимые изменения файла - т.е. загрузку/удаление новых пунктов/файлов в список; - сохраните изменения в файл правым щелчком по компоненту DXImageList или DXSoundList на форме и выбором Save, указав требуемые имя и путь в соответствующем окне диалога; - закройте проект вашего приложения БЕЗ СОХРАНЕНИЯ ИЗМЕНЕНИЙ!!! Это очень важно! В противном случае будут наблюдаться некие негативные последствия: рост объема исполнимого файла и "торможение" среды Delphi при работе с проектом. Почему? Потому что, если сделать это, то файл данных остается внутри соответствующего компонента - DXImageList или DXSoundList и тем самым увеличивает объем исполнимого файла, кроме того "затормаживается работа" среды Delphi при открытии такого проекта, что будет вызывать у Вас искреннее удивление! Вместо этого сохраняйте содержимое измененного файла *.dxg или *.dxw правым щелчком по компоненту DXImageList или DXSoundList и выбором Save, а измененный проект закрывайте БЕЗ ИЗМЕНЕНИЙ!!! (т.е. не сохраняя). Таким образом, Вы оставите компонент пустым, это не будет приводить к указанным выше последствиям (росту исполнимого файла и "торможению" Delphi при открытии проекта). Обновленные версии DelphiX к тому же содержат специальные инструменты (DXGEdit, DXWEdit) для изменения содержимого файлов *.dxg или *.dxw, поэтому также можете использовать и их! Загрузка файлов данных *.dxg или *.dxw в соответствующие компоненты будет производиться Вами на стадии runtime (т.е. во время нормальной работы приложения). Как это делается показано в исходном коде!
Желаю Вам приятной работы по освоению DelphiX !!! |
||||||
исходный код игры (236 Кб) | ||||||
Как
работать с исходным кодом? Внимание!!!
Здесь описано как использовать исходный код игры с библиотеками Для
использования кода и нормальной компиляции необходима установка Содержание - Как
заставить код работать под DelphiX (by Jaro Benes).
- установить библиотеку; -
в опциях среды Delphi указать путь к DelphiX\Source: -
открыть проект Road2City.dpr >
Если сообщения об отсутствии *.dcu, то >
Сообщение об отсутствии DirectDraw.dcu uses
Установить библиотеку - пример установки UnDelphiX: запустить
соответствующий вашей версии Delphi файл с расширением dpk - нажать кнопки Compile, затем Install сохранить изменения в проект. в
пути поиска используемого проекта или среды Delphi добавить ссылки на
папку Source библиотека установлена! ================================================= Теперь как работать с исходным кодом проекта Road2City :
получаем
сообщение об ошибке - Если
мы произведем отмену, то после компиляции во время запуска Метод устранения - нажимаем кнопочку Ignore и ничего страшного не произойдет!
22/03/2007 30/03/2007 ответ:
Файлы,
необходимые для нормальной работы игры вы можете получить,
|
Cвои пожелания, вопросы или заметки отправляйте на: |
|||||||
Обновления
и новости о развитии проекта Мега Информатик |
|||||||
(с) МЕГА ИНФОРМАТИК 2006-2010 |