2009-02-23 5 views
12

Я давно хотел дать игровое программирование и никогда не обходил его, и я наконец решил его вернуть. Я решил попробовать создать простую 2D-платформу. У меня была быстрая игра с XNA, и мне это нравится. То, что я ищу, это сравнение между XNA, directx, OpenGL. главным образом, сильные и слабые стороны между ними. Я был разработчиком .net за последние 4 года, и это были мои знания в основном.XNA, direct X, OpenGL

ответ

12

Если вы хотите сделать 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.

+1

-1, Framerates - не проблема, пока вы не сделаете игру AAA, в которой есть мускулы, чтобы подчеркнуть ад из CPU и видеокарты. Я видел демонстрации XNA со скоростью 1000+ кадров в секунду с отличной графикой (в основном потому, что они использовали тяжелое программирование шейдеров, собственный код не ускорил ваши шейдеры) –

+0

Спасибо за комментарий. Я уточню; Я не хотел подразумевать, что у вас не может быть хорошая частота кадров в игре на основе XNA. –

+0

@Robert P, я изменил свой голос, ваши изменения и замечания о производительности XNA теперь «политически корректны» :). –

3

Если ваш опыт был в основном с .NET, как вы говорите, у XNA был бы самый короткий барьер для входа, хотя вы не получите такой же хорошей производительности, как вы можете, с другими вариантами. Однако, как вы говорите, вы планируете создать 2D-платформер (предполагая, что здесь подразумевается «неадресная обработка»), тогда XNA будет более чем достаточным и, вероятно, самым подходящим выбором для вашего проекта.

2

DirectX не означает, что вам нужно использовать собственный код, там есть несколько управляемых оберток. Потери производительности находятся где-то в диапазоне 1-3% от родного DirectX, но учитывая, что вы сэкономите часы и часы Dev Time и, вероятно, никогда не будете нуждаться в последних 2% в любом случае, управляемый - это путь.

Смотрите этот пример: SlimDX - полностью управляемый упаковщик для DirectX в C#

+0

Управляемый DirectX устарел в пользу XNA –

+0

Вы не читали мое сообщение. Я не говорил о управляемом DX от MS. –

+0

Но XNA требует тонны времени проклятия для конечного пользователя для установки ... так что для начала, почему бы не MDX 1.1? (или SlimDX, если вы немного додумались) –

5

XNA собирается быть простой/быстрый способ получить игру и работает на 360 или Windows-платформ. Это позволит вам продолжать развиваться так, как вы уже знакомы (C#.NET), и он предоставит вам значительную структуру, которая автоматически позаботится об обычно используемом материале. С этой легкостью возникают некоторые ограничения, поскольку, поскольку вы будете ограничены только вышеупомянутыми платформами, и из-за того, что это большая структура, будет много накладных расходов, которые по большей части будут неиспользованы, что приведет к ударам производительности, однако с помощью простого 2D-платформера это вероятно, не будет проблемой.

DirectX собирается ограничить вас и в платформе, и будет намного сложнее учиться и развиваться. Также вы, скорее всего, будете программировать на C или C++ здесь. Преимущества будут в производительности, так как вы обрабатываете все, что вы будете контролировать все и сможете оптимизировать все, что вам нужно. Я бы подумал, что для первой игры вам будет намного лучше начать с XNA и перейти в DirectX после того, как вы «переросли» XNA. Особенно с целью создания простого 2D-платформы.

OpenGL позволит вашей игре работать на большинстве платформ, но будет так сложно (если не в большей степени,), как DirectX (хотя я должен отметить, есть графические движки для OpenGL, которые довольно просты в использовании, как OGRE. Вы также разрабатывать в C/C++ для OpenGL. Снова я бы подумал, что XNA будет лучшим выбором, пока вы не почувствуете, что готовы к следующему шагу.

1

Один из вариантов - написать свой движок в .NET, но реализовать средство визуализации с помощью C++/CLI. Я делаю это для одного из моих проектов. XNA, OpenGL и DX слишком низки для того, что я хочу. Я не хочу писать рендерер, я хочу использовать существующий. Обертка Ogre3D, Mogre, кажется полным беспорядком (не уверен, что это дизайн Mogre, Ogre3D или оба), и большинство других обертки безнадежно устарели. Вместо этого я реализую средство визуализации с использованием C++/CLI и Irrlicht, который, кажется, работает быстрее и лучше, чем Ogre3D.

Вы можете подумать о том, чтобы сделать что-то подобное.

1

Я начал с использования DirectX, но теперь перешел на XNA, главным образом потому, что я хочу больше сосредоточиться на реальном игровом процессе и меньше на технологии, стоящей за игрой. Несомненно, вам все равно придется немного кодировать двигатель, но он очень помогает иметь фреймворк, который поставляет готовые функции специально для игрового программирования.

 Смежные вопросы

  • Нет связанных вопросов^_^