2009-02-23 23 views
12

Hace tiempo que quería dar programación a juegos y nunca llegué a eso, y finalmente he decidido darlo. Decidí probar y crear un juego de plataforma simple a 2D. He tenido un juego rápido con XNA y me gusta. Lo que estoy buscando es una comparación entre XNA, directx, OpenGL. principalmente las fortalezas y debilidades entre ellos. He sido desarrollador de .net durante los últimos 4 años y ese es mi principal conocimiento.XNA, X directa, OpenGL

Respuesta

12

Si desea hacer Direct X, salude a Win32 y COM como sus nuevos mejores amigos. Pasarás mucho tiempo antes aprendiendo y superando la API win32. DirectX con Win32 le proporciona todas las funciones necesarias para el sonido, la entrada de juegos y la visualización de gráficos. También estará escribiendo en C o C++, y aprenderá todo acerca de la administración de la memoria y la mentalidad C, algo que no debería considerar abandonar a la ligera. Aprender y usar C como lenguaje para un proyecto importante puede ser muy esclarecedor y agradecerle por las características modernas del lenguaje de programación y los elementos de diseño. En realidad, no está obligado a usar C o C++ para el desarrollo aquí; hay varios .NET wrappers y otras envolturas de lenguaje para Direct X, pero si tiene experiencia con .NET, también podría usar el framework creado para .NET: XNA.

XNA es un conjunto de herramientas basado en .NET mucho más nuevo. Proporciona muchas de las mismas características que el uso directo de Win32 y DirectX (sonido, entrada, etc.) pero de forma nativa en una plataforma administrada. Para la mayoría de los juegos (especialmente uno cuando recién comienza) puedes obtener increíbles tasas de fotogramas con un juego XNA (aunque una aplicación nativa puede darte más), y es muy bueno para aprender los pormenores del desarrollo del juego: puedes ' realmente sale mal La mayoría de las estructuras de datos fundamentales que necesitará (árboles quad/oct, arquitectura Model-view-controller, manejo de eventos, estructura de su programa) aún necesitará aprender e implementarse usted mismo, y hacerlo en .NET lo hará sin duda será más fácil que en C y C++. Como una buena ventaja adicional, si tienes una Xbox 360, juegos comunitarios de XNA can, with some work, be released through Xbox Live marketplace. Básicamente, como desarrollador de .NET, probablemente te sientas más cómodo aquí.

OpenGL es una biblioteca de plataformas cruzadas para dibujar polígonos. Tiene un marco y API diferente de Direct X, y no proporciona ninguna herramienta de interacción con el sistema operativo. Hay paquetes que le permiten programar en OGL en muchos idiomas diferentes. Sin embargo, como han dicho otros, esto probablemente será tanto trabajo como escribir con Win32 y DirectX. Para otras funciones además de gráficos (teclado, mouse, joystick, audio), podría considerar usar un marco como SDL algunas de las características de DirectX que faltan. Hay una comunidad bastante decente que rodea la biblioteca que puede darle sugerencias y sugerencias si sigue esta ruta.

Se pueden encontrar más ideas al respecto en un artículo casi idéntico, aquí: Suggested Gaming Platform to Learn direct-x, C Open GL, or XNA.

+1

-1, Las tasas de refresco son un asunto no, hasta que se haga un juego AAA que tiene los músculos hacer hincapié en el infierno de la CPU y la tarjeta de vídeo. He visto demostraciones de XNA que funcionan a 1000 fotogramas por segundo con grandes gráficos (principalmente debido a que utilizan la programación de sombreado pesada, código nativo no acelerará sus shaders) –

+0

Gracias por el comentario. Lo aclararé; No quise dar a entender que no se puede tener un buen framerate con un juego basado en XNA. –

+0

@Robert P, he cambiado mi voto, sus ediciones y comentarios sobre el rendimiento de XNA ahora son "políticamente correctos" :). –

3

Si su experiencia ha sido principalmente con .NET como usted dice, XNA tendría la barrera más corta para la entrada, aunque no obtendrá el rendimiento tan bueno como puede con otras opciones. Sin embargo, como dices que estás planeando crear un juego de plataformas en 2D (asumiendo que la implicación aquí es "no intensiva en hardware"), entonces XNA sería más que suficiente y probablemente la opción más adecuada para tu proyecto.

2

DirectX no significa que tenga que usar el código nativo, hay varios contenedores gestionados por ahí. La pérdida de rendimiento está en el rango de 1-3% de DirectX nativo, pero teniendo en cuenta que ahorrará horas y horas de desarrollo y probablemente nunca necesite ese último 2% de todos modos, administrado es el camino a seguir.

ver este ejemplo: SlimDX - una envoltura completamente gestionada para DirectX en C#

+0

Managed DirectX está en desuso en favor de XNA –

+0

No has leído mi publicación. No estaba hablando del DX gestionado de MS. –

+0

Pero XNA requiere toneladas de tiempos de ejecución para el usuario final ... así que para comenzar, ¿por qué no MDX 1.1? (o SlimDX para el caso, cuando hayas avanzado un poco) –

5

XNA va a ser la forma más fácil/más rápida de conseguir un juego en marcha y funcionando para los 360 o Windows plataformas. Le permitirá continuar desarrollando de una manera que ya esté familiarizado (C#.NET) y le proporcionará un marco de trabajo considerable que se encargará automáticamente de las cosas de uso común. Con esta facilidad tiene algunas limitaciones, sin embargo, a medida que estará limitado a sólo las plataformas mencionadas anteriormente y debido a que es un marco grande habrá un montón de gastos que irá gran parte no utilizada causando golpes de rendimiento, sin embargo con un simple juego de plataformas en 2D, este probablemente no sea un problema.

DirectX te va a limitar también en la plataforma, y ​​será mucho más complicado de aprender y desarrollar. También es probable que estés programando en C o C++ aquí. Las ventajas estarán en el rendimiento, ya que usted maneja todo lo que controlará y optimiza todo para lo que necesita. Creo que para un primer juego, vas a estar mucho mejor comenzando con XNA y pasando a DirectX después de que hayas "superado" a XNA. Especialmente con el objetivo de crear un juego de plataformas en 2D simple.

OpenGL permitirá que su juego se ejecute en la mayoría de las plataformas pero será tan complicado (si no más) como DirectX (aunque debo mencionar que hay motores gráficos para OpenGL que son bastante simples de usar como OGRE. desarrollar en C/C++ para OpenGL. De nuevo, creo que XNA sería la mejor opción hasta que sienta que está listo para el siguiente paso.

1

Una opción es escribir su motor en .NET pero implementar el procesador con C++/CLI. estoy haciendo esto para uno de mis proyectos. XNA, OpenGL y DX son demasiado bajo nivel para lo que quiero. no quiero escribir un procesador, quiero usar una ya existente. La El contenedor Ogre3D, Mogre, parece ser un completo desastre (no estoy seguro si es el diseño de Mogre, Ogre3D o ambos), y la mayoría de los otros los envoltorios están irremediablemente desactualizados. En su lugar, estoy implementando el renderizador usando C++/CLI y Irrlicht, que parece ser más rápido y mejor diseñado que Ogre3D.

Es posible pensar en hacer algo como esto.

1

Empecé usando DirectX pero ahora ha pasado a XNA, sobre todo porque quiero ser capaz de centrarse más en el modo de juego real y menos en la tecnología detrás del juego. Claro, todavía tendrá que hacer un poco de codificación del motor, pero ayuda mucho tener un marco que proporciona funciones ya hechas específicamente para la programación de juegos.