2009-02-05 23 views
50

In termini di sviluppo PC (ad esclusione di Xbox e Zune),Confronto tra XNA e DirectX (C#)

Qual è la differenza tra XNA e C# DirectX? C# DirectX ha un vantaggio significativo su XNA (in termini di velocità, royalties, ecc.)?

Come sono i due rispetto alla velocità non gestita C++ DirectX?

Dove si sta muovendo il settore in termini di programmazione di giochi?

risposta

50

Se sei veramente bravo a scrivere codice non gestito, probabilmente sarai in grado di scrivere un motore grafico più veloce su DirectX. Tuttavia, per l'hobbista, XNA ha molto di prestazioni, sia per lo sviluppo di giochi 2D e 3D.

Here is a good Channel 9 video dove eseguono un gioco di corse XNA su Xbox 360. Funziona bene anche in full HD. Molti dei giochi XBox Live Arcade sono stati sviluppati dalla comunità XNA.

Per quanto riguarda C# DirectX, come ricordo, Managed DirectX come è stato chiamato, non è più ufficialmente supportato dal momento che XNA sostanzialmente lo sostituisce. Potrei sbagliarmi, è passato molto tempo da quando l'ho guardato.

Le differenze di prestazioni sono trascurabili tra XNA e Managed DirectX poiché, in sostanza, sono la stessa cosa; XNA ha solo alcuni bit di convenienza per ridurre la quantità di codice boilerplate che è necessario scrivere.

+0

Grazie per questo sovietico. –

15
  1. XNA e DirectX sono implementazioni molto diverse per risolvere lo stesso problema: programmazione intensiva grafica ad alte prestazioni. Entrambi supportano componenti 2D, 3D, audio e di rete. DirectX non è gestito solo se XNA è il codice gestito.
  2. Esiste un'implementazione gestita di DirectX che è un wrapper attorno alle chiamate DirectX ma che non viene aggiornato dopo la versione corrente, quindi non mi preoccuperei di farlo.
  3. XNA non è un wrapper di DirectX non gestito. Usa parti di DirectX ma non è un wrapper.
  4. L'industria sembra ancora impostata su DirectX non gestita. Lo dico perché tutte le principali case produttrici di motori sono ancora codificate in C++, ASM e supportano DirectX (esclusivamente o in combinazione con OpenGL per le versioni Linux/Mac). Il fatto che Microsoft stia "facendo cadere" il wrapper gestito da DirectX e dicendo alle persone di usare piuttosto gli show XNA è dove stanno spingendo gli sviluppatori gestiti.
+0

Ehm, cosa? XNA è un wrapper. – TraumaPony

+4

No non lo è - vedi http://xnarocks.spaces.live.com/blog/cns!CDFDED0A2593C8E1!172.entry se hai bisogno di chiarimenti su di esso. Solo per dare un veloce esempio di wrapper con rapporto 1: 1. In che modo il materiale della pipeline in XNA 2.0 si connette a DirectX? Non è così. Non è un involucro. –

+2

+1, XNA è una libreria di giochi di codice gestita di livello superiore scritta su DirectX. Per molte cose non usa nemmeno le classi/strutture di DirectX, ma le rotola di sua proprietà, in particolare matrici, vettori e altri ... –

30

La roba XNA Game Studio è focalizzata intorno risolvere i problemi di gioco centric, anche se vorrei mettere in discussione ogni poster che dice le prestazioni della roba Game Studio XNA è peggio di x dirette gestite senza vedere alcuni parametri decenti.

Un gruppo indipendente al di fuori di Stati membri hanno creato un progetto chiamato SlimDX - http://slimdx.mdxinfo.com/ Se si sta scrivendo un'applicazione piuttosto che un gioco (che mi aspetto che non sei da parte delle altre questioni), allora che potrebbe essere opportuno prendere in considerazione.

L'industria utilizza ancora il C++ per il gioco, ma ci sono state versioni di giochi di successo scritte in codice completamente gestito utilizzando XNA Game Studio nella sezione giochi di comunità di XBox live e rilasciate sullo stesso XBox Arcade. Ci dovrebbero essere alcune statistiche interessanti che arrivano molto presto su quante persone hanno fatto sui giochi della comunità.

Molti giochi a prezzo pieno utilizzano C++ per alcuni, ma qualcosa come Lua per la logica di gioco reale ... e Lua non è noto per la velocità incredibile!

C# ha una buona curva di apprendimento ed è utilizzato dai programmatori di strumenti del settore: sarebbe una lingua utile da tenere sotto controllo. C++ sarebbe un ottimo linguaggio da avere, ma richiede più disciplina per creare codice funzionale - e dà a qualcuno di nuovo molto più corda da cui impiccarsi. C# può cambiare dinamicamente e fare cose come i loop di srotolamento in fase di esecuzione piuttosto che compilare il tempo: il buon C# può essere più veloce o più veloce del buon C++ leggibile, ma devi sapere come usarlo. In loop davvero stretti, C++ e Assembler potrebbero vincere in determinate circostanze. Spesso nei giochi che utilizzano C++, gli allocatori personalizzati vengono creati con le proprie strategie di memoria per tentare di aiutare la frammentazione causata da normali allocatori ... questo tipo di cose viene gestito dal CLR in .Net/C# e finché si programma al i punti di forza dei garbage collector (lo stesso che avresti a che fare con la tua implementazione C++) quindi non devi preoccuparti di dettagli di implementazione di così basso livello in .Net.

Se stai cercando di entrare nello sviluppo del gioco e di decidere su una lingua (che, leggendo tra le righe sembra essere dove stai andando con quella linea di domande) allora il linguaggio migliore da usare è quello in cui hai un progetto finito da mostrare alla fine di esso, sia esso C++, obiettivo C, C#, Flash, Silverlight, ecc. Man mano che le lingue cambiano e entrano ed escono dal favore, i reclutatori spesso cercano una comprovata padronanza di diverse lingue - che potrebbe mitigare non conoscendo quello che stanno attualmente utilizzando e un portfolio di lavoro completato lo farebbe.

+1

"Metterei in discussione qualsiasi poster che dice che la performance della roba in studio di Xna è qualsiasi peggio di gestire direttamente x senza vedere alcune metriche decenti. " So che sono passati alcuni anni ma questo post riceve ancora molte visualizzazioni, le chiamate XNA sono circa 6 volte più lente delle chiamate SharpDX e 4 volte più lente delle chiamate slimdx: http://code4k.blogspot.co.uk/2011/ 03/benchmarking-cnet-direct3d-11-apis-vs.html –

+0

bene che sembra una prova decente :) Buona link @STRAIGHTOUTTACOMPTON – paulecoyote

+0

@STRAIGHTOUTTACOMPTON ** Nota per googlers **: _ [Aggiornamento 2012/05/15: Nota che il codice originale è stato ottimizzato per una particolare configurazione e ** potrebbe non darti gli stessi risultati **. Ho ** ** riscritto ** questo esempio per fornire risultati ** più accurati e prevedibili **. ** Anche il confronto con XNA non era corretto e impreciso **, dovresti avere qualcosa come x4 più lento invece di x9. L'ultima versione di SharpDX 2.1.0 è anche x1.35 più lenta di C++ ora. Un aggiornamento di questo articolo seguirà sul nuovo sito web sharpdx.org] (http://code4k.blogspot.co.uk/2011/03/benchmarking-cnet-direct3d-11-apis-vs.html) _ – MickyD

5

Al momento, sembra che Microsoft non abbia intenzione di supportare XNA in app in stile Metro. Un'alternativa a XNA e la "Managed DirectX" ora deprecata è SharpDx. Questo può essere usato per creare app in stile Metro ed è stato favorevolmente benchmarked contro XNA, SlimDX e il pacchetto di codice API di Windows.