Я давно хотел дать игровое программирование и никогда не обходил его, и я наконец решил его вернуть. Я решил попробовать создать простую 2D-платформу. У меня была быстрая игра с XNA, и мне это нравится. То, что я ищу, это сравнение между XNA, directx, OpenGL. главным образом, сильные и слабые стороны между ними. Я был разработчиком .net за последние 4 года, и это были мои знания в основном.XNA, direct X, OpenGL
ответ
Если вы хотите сделать Direct X, поздоровайтесь с Win32 и COM как ваши новые лучшие друзья. Вы будете тратить много времени на изучение знаний и навыков API win32. DirectX с Win32 предоставляет вам все функции, необходимые для звука, ввода игры и графического дисплея. Вы также будете писать на C или C++, и вы узнаете все об управлении памятью и менталитете C - не то, что вам следует рассмотреть, чтобы отказаться от него. Изучение и использование C как языка для крупного проекта может быть очень освещающим, и вы благодарны за современные функции языка программирования и элементы дизайна. Вы на самом деле не вынуждены использовать C или C++ для разработки здесь; существуют различные .NET-обертки и другие языковые оболочки для Direct X, но если у вас есть опыт .NET, вы можете использовать фреймворк для .NET: XNA.
XNA - это намного более новый, основанный на .NET набор инструментов. Он обеспечивает многие из тех же функций, что прямое использование Win32 и DirectX (звук, вход и т. Д.), Но изначально на управляемой платформе. Для большинства игр (особенно когда вы только начинаете) вы можете получить отличные фреймворки с XNA-игрой (даже если родное приложение может дать вам больше), и это очень хорошо для изучения возможностей разработки игр - t действительно идет не так. Большинство фундаментальных структур данных, которые вам понадобятся (квадроциклы, архитектура Model-view-controller, обработка событий, структура вашей программы), вам все равно нужно будет учиться и реализовывать себя, а это в .NET будет безусловно, будет проще, чем на C и C++. Как хороший бонусный бонус, если у вас есть Xbox 360, игры сообщества XNA can, with some work, be released through Xbox Live marketplace. В принципе, как разработчик .NET вы, вероятно, почувствуете себя наиболее комфортно здесь.
OpenGL - это библиотека кросс-платоформ для рисования полигонов. Он имеет другую структуру и API от Direct X и не предоставляет каких-либо инструментов взаимодействия с ОС. Есть пакеты, которые позволяют вам программировать в OGL на разных языках. Однако, как говорили другие, это, вероятно, будет так же много работать, как писать с Win32 и DirectX. Для других функций, помимо графики (клавиатура, мышь, джойстик, аудио), вы можете рассмотреть возможность использования фреймворка вроде SDL некоторых из отсутствующих функций DirectX. В библиотеке есть довольно приличное сообщество, которое может дать вам указатели и подсказки, если вы пройдете этот маршрут.
Другие мысли об этом можно найти в почти идентичной статье, здесь: Suggested Gaming Platform to Learn direct-x, C Open GL, or XNA.
Если ваш опыт был в основном с .NET, как вы говорите, у XNA был бы самый короткий барьер для входа, хотя вы не получите такой же хорошей производительности, как вы можете, с другими вариантами. Однако, как вы говорите, вы планируете создать 2D-платформер (предполагая, что здесь подразумевается «неадресная обработка»), тогда XNA будет более чем достаточным и, вероятно, самым подходящим выбором для вашего проекта.
DirectX не означает, что вам нужно использовать собственный код, там есть несколько управляемых оберток. Потери производительности находятся где-то в диапазоне 1-3% от родного DirectX, но учитывая, что вы сэкономите часы и часы Dev Time и, вероятно, никогда не будете нуждаться в последних 2% в любом случае, управляемый - это путь.
Смотрите этот пример: SlimDX - полностью управляемый упаковщик для DirectX в C#
Управляемый DirectX устарел в пользу XNA –
Вы не читали мое сообщение. Я не говорил о управляемом DX от MS. –
Но XNA требует тонны времени проклятия для конечного пользователя для установки ... так что для начала, почему бы не MDX 1.1? (или SlimDX, если вы немного додумались) –
XNA собирается быть простой/быстрый способ получить игру и работает на 360 или Windows-платформ. Это позволит вам продолжать развиваться так, как вы уже знакомы (C#.NET), и он предоставит вам значительную структуру, которая автоматически позаботится об обычно используемом материале. С этой легкостью возникают некоторые ограничения, поскольку, поскольку вы будете ограничены только вышеупомянутыми платформами, и из-за того, что это большая структура, будет много накладных расходов, которые по большей части будут неиспользованы, что приведет к ударам производительности, однако с помощью простого 2D-платформера это вероятно, не будет проблемой.
DirectX собирается ограничить вас и в платформе, и будет намного сложнее учиться и развиваться. Также вы, скорее всего, будете программировать на C или C++ здесь. Преимущества будут в производительности, так как вы обрабатываете все, что вы будете контролировать все и сможете оптимизировать все, что вам нужно. Я бы подумал, что для первой игры вам будет намного лучше начать с XNA и перейти в DirectX после того, как вы «переросли» XNA. Особенно с целью создания простого 2D-платформы.
OpenGL позволит вашей игре работать на большинстве платформ, но будет так сложно (если не в большей степени,), как DirectX (хотя я должен отметить, есть графические движки для OpenGL, которые довольно просты в использовании, как OGRE. Вы также разрабатывать в C/C++ для OpenGL. Снова я бы подумал, что XNA будет лучшим выбором, пока вы не почувствуете, что готовы к следующему шагу.
Один из вариантов - написать свой движок в .NET, но реализовать средство визуализации с помощью C++/CLI. Я делаю это для одного из моих проектов. XNA, OpenGL и DX слишком низки для того, что я хочу. Я не хочу писать рендерер, я хочу использовать существующий. Обертка Ogre3D, Mogre, кажется полным беспорядком (не уверен, что это дизайн Mogre, Ogre3D или оба), и большинство других обертки безнадежно устарели. Вместо этого я реализую средство визуализации с использованием C++/CLI и Irrlicht, который, кажется, работает быстрее и лучше, чем Ogre3D.
Вы можете подумать о том, чтобы сделать что-то подобное.
Я начал с использования DirectX, но теперь перешел на XNA, главным образом потому, что я хочу больше сосредоточиться на реальном игровом процессе и меньше на технологии, стоящей за игрой. Несомненно, вам все равно придется немного кодировать двигатель, но он очень помогает иметь фреймворк, который поставляет готовые функции специально для игрового программирования.
-1, Framerates - не проблема, пока вы не сделаете игру AAA, в которой есть мускулы, чтобы подчеркнуть ад из CPU и видеокарты. Я видел демонстрации XNA со скоростью 1000+ кадров в секунду с отличной графикой (в основном потому, что они использовали тяжелое программирование шейдеров, собственный код не ускорил ваши шейдеры) –
Спасибо за комментарий. Я уточню; Я не хотел подразумевать, что у вас не может быть хорошая частота кадров в игре на основе XNA. –
@Robert P, я изменил свой голос, ваши изменения и замечания о производительности XNA теперь «политически корректны» :). –