Сравнение между XNA и DirectX (C #) - PullRequest
       12

Сравнение между XNA и DirectX (C #)

50 голосов
/ 05 февраля 2009

С точки зрения разработки ПК (исключая Xbox и Zune),

В чем разница между XNA и C # DirectX? Обладает ли C # DirectX значительным преимуществом по сравнению с XNA (с точки зрения скорости, роялти и т. Д.)?

Как эти два сравниваются со скоростью неуправляемого C ++ DirectX?

Куда движется индустрия с точки зрения игрового программирования?

Ответы [ 4 ]

52 голосов
/ 05 февраля 2009

Если вы действительно хорошо пишете неуправляемый код, вы, вероятно, сможете написать более быстрый графический движок поверх DirectX. Однако для любителя XNA обладает достаточной производительностью, как для разработки 2D, так и для 3D игр.

Вот хорошее видео 9-го канала , где они запускают гоночную игру, построенную на XNA на Xbox 360. Она хорошо работает даже в Full HD. Несколько игр XBox Live Arcade были разработаны сообществом XNA.

Что касается C # DirectX, насколько я помню, Managed DirectX, как он назывался, больше официально не поддерживается, поскольку XNA в основном заменяет его. Я могу ошибаться, это было очень давно, так как я смотрел на это.

Различия в производительности между XNA и Managed DirectX незначительны, поскольку, по сути, это одно и то же; У XNA просто есть несколько удобных битов, чтобы уменьшить количество шаблонного кода, который вам нужно написать.

31 голосов
/ 05 февраля 2009

Материал Xna Game Studio ориентирован на решение проблем, связанных с игрой, хотя я бы задал вопрос любому постеру, который говорит, что производительность материала Xna Game Studio несколько хуже, чем у управляемого direct x, без каких-либо приличных показателей.

Независимая группа за пределами MS создала проект под названием SlimDx - http://slimdx.mdxinfo.com/ Если вы пишете приложение, а не игру (что, я полагаю, вас не интересуют другие вопросы), то это стоит рассмотреть.

В отрасли по-прежнему широко используется C ++ для игр, но были успешные выпуски игр, написанных в полностью управляемом коде с использованием XNA Game Studio, в разделе игр сообщества XBox live и выпущенных на самой XBox Arcade. Вскоре должны появиться некоторые интересные статистические данные о том, сколько людей заработало на общественных играх.

Многие игры с полной ценой используют C ++ для некоторых, но что-то вроде Lua для реальной игровой логики ... а Lua не славится невероятной скоростью!

C # имеет хорошую кривую обучения и используется программистами в отрасли - это был бы полезный язык для вас. C ++ был бы отличным языком, но он требует большей дисциплины для создания функционального кода - и дает кому-то новому гораздо больше возможностей для подвешивания. C # может динамически изменяться и выполнять такие вещи, как развертывание циклов во время выполнения, а не во время компиляции - хороший C # может быть таким же быстрым или быстрым, как хороший читаемый C ++ - но вы должны знать, как его использовать. В действительно тесных циклах C ++ и Assembler могут выиграть при определенных обстоятельствах. Часто в играх, использующих C ++, пользовательские распределители создаются со своими собственными стратегиями памяти, чтобы попытаться помочь фрагментации, вызванной обычными распределителями ... с такими вещами занимается CLR в .Net / C # и до тех пор, пока вы программируете на сильные стороны сборщиков мусора (то же самое, что вы должны делать с собственной реализацией C ++), тогда вам не нужно беспокоиться о таких низкоуровневых деталях реализации в .Net.

Если вы хотите заняться разработкой игр и выбрать язык (который, по-видимому, читается между строк, когда вы идете с этой линией вопросов), то лучший язык для использования - тот, где вы готовый проект, который нужно показать в конце, будь то C ++, цель C, C #, Flash, Silverlight и т. д. По мере того, как языки меняются и пользуются популярностью, рекрутеры часто ищут проверенное владение различными языками - что может смягчить, не зная того, что они используют в настоящее время - и портфель выполненных работ сделает это.

17 голосов
/ 05 февраля 2009
  1. XNA и DirectX - это очень разные реализации для решения одной и той же задачи - высокопроизводительного графически интенсивного программирования. Оба поддерживают 2D, 3D, аудио и сетевые компоненты. DirectX неуправляем, только если XNA является управляемым кодом.
  2. Существует управляемая реализация DirectX, которая является оболочкой для вызовов DirectX, но она не обновляется после текущей версии, поэтому я бы не стал беспокоиться об этом.
  3. XNA не является оболочкой для неуправляемого DirectX. Он использует части DirectX, но не является оболочкой.
  4. Похоже, что индустрия все еще сильно настроена на неуправляемый DirectX - я говорю это, потому что все основные движковые компании все еще пишут на C ++, ASM и поддерживают DirectX (либо отдельно, либо в сочетании с OpenGL для версий Linux / Mac). Тот факт, что Microsoft «отбрасывает» управляемую оболочку DirectX и говорит людям, чтобы они предпочли использовать XNA, показывает, что именно они подталкивают управляемых разработчиков.
5 голосов
/ 06 марта 2012

В настоящий момент кажется, что Microsoft не планирует поддерживать XNA в приложениях в стиле Metro. Альтернативой XNA и ныне устаревшим «Managed DirectX» является SharpDx . Это может быть использовано для создания приложений в стиле Metro и было сравнительно с XNA, SlimDX и пакетом кода Windows API.

...