| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Программирование игр, графики и искусственного интеллекта > Игровой движок: проектирование |
| Автор: chipset 4.4.2005, 09:48 |
| Привет всем. Есть следующая проблема: Сейчас проектирую игровую архитектуру, нормальных обьемов (в плане, не тетрис). Пока что есть следующие соображения: [Движок]<->[Драйвер+Медиатор]<->[Игровая логика] ###|##########|###############| ###|--------------> [Утилиты]<--------------------| Движок, игровая логика, и утилиты будут находиться в DLL. Драйвер+Медиатор будет находиться в одной EXE, где и будет собственно вся инициализация, цикл приложения и т.д. Движок - граф, сетевой, и т.д. движок. Игровая логика - всё что связано непосредственно с логикой игры. Собственно какие проблемы: 1) Общаться через медиатор - жрёт много ресурсов - думаю наилучшее решение: напрямую односторонние вызовы движка из игровой логики. 2) Утилиты, тут я вообще в ауте. Всё что там есть, вроде нужно всем, с другой стороны - создавать три копии одного фреймворка, как-то не есть гуд. 3) Может вообще запихнуть всё в одну EXE? С уважением. Добавлено @ 09:54 Ещё одно решение, на котором я сейчас остановился: Запихал утилиты в главный EXE и передаю фабрику обьектов обоим модулям. |
| Автор: arilou 4.4.2005, 11:15 |
| chipset Ты не мог бы немного поподробнее, а то как-то все сумбурно и непонятно... |
| Автор: chipset 4.4.2005, 11:26 | ||
Есть игра Игра состоит из следующих блоков(как предполагается): 1) Игровой движок - это: загрузка 3D моделей, работа с 3D графикой, 2D графикой, сетевые функции, звук, управление (джойстик) и т.д. 2) Логика игры - это сам сюжет, правила игры, кондиции, карты, и т.д... 3) Драйвер игры - это EXE файл который запускается пользователем. Он инициализирует все модули, самого себя, и служит границей между двумя модулями [№1,№2], эдаким переправочным пунктом. Также, в этом EXE находятся всевозможные утилиты, наподобие: сериализационных, XML-тулзов, скриптов, парсинг и т.д... ... Есть два момента ради которых я создал эту тему: 1) Мне не нравится то что драйвер игры служит переправочным модулем, мне кажется это сокращает производительность. 2) Дело в том что утилиты содержащиеся в драйвере будут, скорее всего нужны всем трём модулям. ... Для второго пункта я придумал временное решение, основанное на четвертой динамической библиотекой, которая будет инкапсулировать утилиты. Мне не хочется плодить DLL вот только... |
| Автор: arilou 4.4.2005, 11:47 | ||||
| Все понятно, а чем тебе не нравится DLL? Ведь она выполняется в адресном пространстве процесса? Ведь затрат на вызов не будет. По-моему, 1 и 3 - это код, все верно. А вот 2 - это уже контент, так сказать. Ведь сюжет, правила, и т.д. можно описать с помощью данных (например, XML). Поэтому в п.1 у тебя должны быть средства, которые п.2 будут загружать, парсить, и давать возможность взаимодействовать между собой и игроком.
Именно это решение и напрашивается само собой. ============ Вообще, я бы выделил такие части: 1. Движок контента - отрисовка графики, воспроизведение звука. Он не зависит от всего остального и предоставляет унифицированный интерфейс к своим ф-циям. Сюда же идет поддержка сцен и сети. При желании, сеть можно выделить в отдельный "движок". 2. Движок игры - поддержка скриптов, персонажей, айтемов, триггеров, событий. Сюда идет подсистема, которая позволяет загружать и сохранаять данную информацию. 3. Набор утилит, которые пользуются интерфейсами из 1 и 2, и дают возможность редактировать контент, поддерживаемый этими подсистемами. 4. Некий runtime, которому дается начальная позиция, по которой он инициализирует игровой мир. Все это в сумме называется "игровой движок". Сама игра - это, на мой взгляд, контент, порожденный при помощи п.1, 2 и 3, "запускаемый на выполнение" п.4. |
| Автор: chipset 4.4.2005, 11:57 | ||||||
tnx, так и сделаю
Сейчас так все и нарисовано, кроме библиотеки утилит
Да, конечно.. |
| Автор: arilou 4.4.2005, 12:12 |
| В качестве примера посмотри http://udn.epicgames.com/Two/UnrealEngine2Runtime. |
| Автор: chipset 4.4.2005, 12:34 | ||
Глянул Да и не хотим мы игру в DLL засовывать Изначально ведь и задумывается как: правила, загрузчик и обработчик карт. |
| Автор: arilou 4.4.2005, 15:17 | ||
Поясни плих немного этот момент - как это, игру - и в DLL? --- 800-ое сообщение!!! |
| Автор: chipset 4.4.2005, 15:24 | ||
Под этим я подразумеваю засовывание всего составляющего игры: NPC, карты, диалоги, названия,и т.д., в DLL. |
| Автор: arilou 4.4.2005, 15:27 | ||
Тогда согласен на все 100%. Кстати, с .NET'ом отпадает необходимость в интерграции в движик какого-либо скриптового языка. |
| Автор: chipset 4.4.2005, 15:30 | ||
Это в таком смысле, что C# настолько простой язык, что сам сойдет в роли скрипт-языка? Я что-то не сильно понял |
| Автор: arilou 4.4.2005, 15:43 | ||
.NET framework дает возможность в рантайме загружать любые сборки и выполнять оттуда код. Это позволяет использовать любой .NET-совместимый язык как "скриптовой". Для запуска скриптов можно использовать AppDomain'ы. Это нужно для того, чтобы иметь возможность выгрузить скрипт, изменить, перекомпилить, и запустить заново. Причем компилирование скрипта можно сделать с помощью самого движка, благо что .NET дает соотв. классы для динмамической кодогенерации. Получаешь выигрыш в производительности, потому что выполняется native код, а не интерпретируется. Вот. |
| Автор: chipset 4.4.2005, 15:48 |
| arilou, ещё одно преимущество в сторону .NET для игровых разработок Хотя это уже в малость другую тему |