Comparación entre XNA y DirectX(C#)
(4)
- XNA y DirectX son implementaciones muy diferentes para resolver el mismo problema: programación intensiva de gráficos de alto rendimiento. Ambos admiten componentes 2D, 3D, audio y de red. DirectX no se administra solo cuando XNA es código administrado.
- Hay una implementación administrada de DirectX que es una envoltura alrededor de las llamadas de DirectX, pero que no se actualiza después de la versión actual, así que no me molestaría.
- XNA no es un envoltorio de DirectX no administrado. Utiliza partes de DirectX, pero no es un envoltorio.
- La industria todavía parece muy determinada en DirectX no administrado; lo digo porque todas las principales compañías de motores aún están codificando en C ++, ASM y compatibles con DirectX (ya sea solo o junto con OpenGL para versiones de Linux / Mac). El hecho de que Microsoft está "descartando" el envoltorio administrado de DirectX y diciéndole a la gente que prefiera usar XNA muestra que es ahí donde impulsan a los desarrolladores administrados.
En términos de desarrollo de PC (excluyendo Xbox y Zune),
¿Cuál es la diferencia entre XNA y C # DirectX? ¿Tiene C # DirectX una ventaja significativa sobre XNA (en términos de velocidad, regalías, etc.)?
¿Cómo se comparan los dos con la velocidad no administrada de C ++ DirectX?
¿Dónde se mueve la industria en términos de programación de juegos?
El material de Xna Game Studio se centra en resolver problemas centrados en el juego, aunque cuestionaría cualquier póster que diga que el rendimiento del material de estudio del juego Xna es peor que el directo administrado x sin ver algunas métricas decentes.
Un grupo independiente fuera de MS ha creado un proyecto llamado SlimDx - http://slimdx.mdxinfo.com/ Si está escribiendo una aplicación en lugar de un juego (que espero que no sea por las otras preguntas), entonces podría valer la pena considerando.
La industria todavía utiliza mucho C ++ para las tripas de los juegos, pero se han producido lanzamientos exitosos de juegos escritos en código completamente administrado usando XNA Game Studio en la sección de juegos comunitarios de XBox Live, y lanzados en Xbox Arcade. Deberían aparecer algunas estadísticas interesantes sobre cuánto han hecho las personas en los juegos de la comunidad.
Muchos juegos de precio completo usan C ++ para algunos, pero algo como Lua para la lógica real del juego ... ¡y Lua no es conocida por su velocidad increíble!
C # tiene una buena curva de aprendizaje y la utilizan los programadores de herramientas de la industria. Sería un lenguaje útil para tener en mente. C ++ sería un gran lenguaje para tener, pero requiere más disciplina para crear código funcional, y le da a alguien mucha más cuerda para colgarse. C # puede cambiar dinámicamente y hacer cosas como desenrollar bucles en tiempo de ejecución en lugar de tiempo de compilación (un buen C # puede ser tan rápido o más rápido que un buen C ++ legible), pero debe saber cómo usarlo. En loops muy estrechos, C ++ y Assembler podrían ganar en ciertas circunstancias. A menudo en los juegos que usan C ++, los asignadores personalizados se crean con sus propias estrategias de memoria para tratar de ayudar a la fragmentación causada por los asignadores normales ... ese tipo de cosas se soluciona con el CLR en .Net / C # y mientras se programe en el las fortalezas de los recolectores de basura (lo mismo que tendría que hacer con su propia implementación de C ++), entonces no tiene que preocuparse por los detalles de implementación de bajo nivel en .Net.
Si está buscando ingresar al desarrollo del juego y decidir sobre un idioma (que, al leer entre líneas parece ser hacia dónde va con esa línea de preguntas), entonces el mejor lenguaje para usar es el que tiene un acabado proyecto que se mostrará al final, ya sea C ++, objetivo C, C #, Flash, Silverlight, etc. A medida que los idiomas cambian y pasan desapercibidos, los reclutadores a menudo buscan un dominio comprobado de diferentes idiomas, lo que podría mitigar el desconocimiento. el que están usando actualmente, y una cartera de trabajo completo lo haría.
Si realmente sabe escribir código no administrado, probablemente podrá escribir un motor de gráficos más rápido encima de DirectX. Sin embargo, para el aficionado, XNA tiene mucho rendimiento, tanto para el desarrollo de juegos 2D como 3D.
Aquí hay un buen video de Channel 9 donde se ejecuta un juego de carreras XNA en Xbox 360. Funciona bien incluso en Full HD. Varios de los juegos XBox Live Arcade han sido desarrollados por la comunidad XNA.
En cuanto a C # DirectX, según recuerdo, Managed DirectX como se llamaba, ya no es oficialmente compatible ya que XNA básicamente lo reemplaza. Podría estar equivocado, ha pasado mucho tiempo desde que lo miré.
Las diferencias de rendimiento son insignificantes entre XNA y Managed DirectX ya que, en esencia, son la misma cosa; XNA solo tiene algunos bits de conveniencia para reducir la cantidad de código repetitivo que necesita para escribir.
Por el momento, parece que Microsoft no planea admitir XNA en las aplicaciones de estilo Metro. Una alternativa a XNA y el ahora "DirectX administrado" desaprobado es SharpDx . Esto se puede usar para crear aplicaciones de estilo Metro y se ha comparado favorablemente con XNA, SlimDX y el paquete de códigos API de Windows.