Редактор уровней + Игра -> Дублирование кода рендеринга / игры?

14

Я читал о том, как разработать код для игры. Одна вещь, которую я не смог понять, - как вам удается писать редактор уровней вне игры (не «редактор уровней в игре») без «копирования» кода из игры? Например, вам может потребоваться скопировать весь код о различных типах сущностей, которые вы можете иметь. Вам нужно будет добавить код рендеринга игры.

Я думаю, это можно сделать, сделав DLL из «движка» игры. Затем поделитесь им между самой игрой и редактором уровней.

Или есть лучший / более простой способ сделать это?

Уткарш Синха
источник

Ответы:

13

Вам придется разделить ваш код на отдельные проекты (в том же решении). Обычно у вас есть следующие настройки:

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

Для еще больших проектов вы можете разделить ядро ​​ядра на несколько проектов, таких как ядро, физика, графика, аудио, ввод и работа в сети. Все эти проекты не могут ссылаться друг на друга, но все они ссылаются на Core, где вы можете хранить некоторые общие базовые типы.

Если бы они ссылались друг на друга, разделение было бы бесполезным.

В любом случае это должно помочь вам повторно использовать части вашего движка в других проектах. Например, для редактора вам нужно будет ссылаться на проект Graphics, который ссылается на само ядро.

Это разделение также означает, что теперь вы можете использовать технологии Windows Only, такие как WPF, в своем редакторе, в то время как ваша игра может по-прежнему ориентироваться на Windows и XBLIG.

Для получения дополнительной информации об использовании XNA в среде WPF перейдите по этой ссылке: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- из-а-МОФ-application.aspx

Рой Т.
источник
Благодарность! Еще немного оглядываясь по сторонам, и я нашел это - create.msdn.com/en-US/education/catalog/sample/… - Похоже, что WinForms поддерживается лучше, чем WPF!
Уткарш Синха
Эй, это правда, но этот образец с 2008 года, до того, как WPF действительно начал свою работу. Я перешел с WinForms на WPF год назад, и я бы ни за что не переключился назад :). Если вы хотите оставаться совместимым с этим образцом, вы всегда можете использовать WinFormsControlHost в приложении WPF :).
Рой Т.
4

Отделите логику рендеринга как можно лучше от реальной игровой логики при разработке игрового движка. Один из способов сделать это - использовать шаблон компонентов при создании игрового движка. Например, XNA использует этот шаблон на уровне структуры для гибкости. Используйте ту же базу кода для рендеринга с вашим редактором уровней; напишите обертки, если вам нужно.

Точно так же другой популярный шаблон - MVC (Model-View-Controller), который также может помочь. Кодируйте свой двигатель, используя MVC как обычно. Затем вы можете использовать один и тот же код для View и Model, но добавить собственный контроллер для редактирования модели для редактора вашего уровня вместо контроллера игрового движка, который обновляется в соответствии с входными данными игры. Реализация сериализации для игровых моделей для загрузки / сохранения их из редактора или игры.

Хранение компонентов в отдельных сборках, конечно, будет способствовать разделению ...

XiaoChuan Yu
источник