XNA è utile per lo sviluppo professionale per Xbox 360?


16

Voglio iniziare a sviluppare per la mia Xbox 360 e ho sentito parlare del framework XNA che può colpire sia il PC che la Xbox. Sembra un'opzione interessante poiché i miei clienti possono usare il gioco / app anche su computer normali.

Tuttavia sono molto nuovo sulla scena Xbox. XNA è solo per lo sviluppo di hobbisti e non è raccomandato per lo sviluppo di applicazioni semi-professionali o aziendali? XNA non ha le capacità di una soluzione sviluppata in C ++ o la riduce in modo grave le prestazioni di un gioco / app in esecuzione su Xbox?

È possibile scegliere come target Xbox su C # e senza XNA? Quali sono i vantaggi?

La programmazione di basso livello sarebbe in C ++ direttamente funzionante con DirectX. Quali sono i vantaggi?

Risposte:


15

La risposta breve: .

XNA è solo uno strumento. È adatto a tutti tranne i giochi con processore e grafica ad alta intensità. Se stai considerando XNA per un gioco Xbox 360, ecco cosa ti perderai:

  • Accesso all'unità SIMD / Vector per eseguire calcoli in virgola mobile CPU davvero molto veloci
  • Capacità di usare un codice in lingua nativa che sarà probabilmente un po 'più veloce di C #
  • Capacità di essere un po 'più pigro di come allocare memoria
  • I giochi XBLIG hanno accesso solo a 4 dei 6 core (ma abbiamo ancora tutte e 3 le CPU e non sono neanche core completi, quindi non perdiamo molto) - non sono sicuro che ciò si applichi a XNA non XBLIG Giochi
  • Accesso diretto a DirectX per eseguire trucchi grafici davvero oscuri

Potrebbero essercene di più: questo è fuori dalla mia testa.

(Speculazione: se sei uno sviluppatore professionista (come in: avere un DevKit), io penso che è possibile utilizzare XNA con codice nativo, uguale a P / Invoke su Windows meglio di entrambi i mondi Dovresti chiedere a Microsoft... Vedi anche XDK .)

La linea di fondo è che un gioco XNA è quasi veloce come un gioco nativo e può fare quasi altrettante cose. Ti suggerirei di usarlo a meno che non trovi un motivo convincente per non farlo.

Non so se esiste alcun tipo di DirectX gestito per 360. Forse SlimDX è un buon punto di partenza.


1
Che cos'è "XBLIG"?
Ricket,

2
Gioco indie Xbox live
dotminic

Ci sono solo 3 core e abbiamo accesso a tutti loro. Non hai accesso a 2 thread. Uno di questi thread è per XNA, l'altro è un thread a cui nessuno ha accesso durante la creazione di giochi, come lo è per il sistema operativo XBOX.
Olhovsky,

1
Inoltre non devi essere pigro con l'allocazione di memoria. Ad eccezione dei giochi molto semplici, è necessario raggruppare tutti gli oggetti (che coinvolge un modello di tipo allocato / libero - non migliore di C ++) per impedire costose raccolte di dati inutili sul CLR compatto .NET, che utilizza un approccio di raccolta generazionale.
Olhovsky,

12

A meno che tu non sia disposto a pagare $ 10.000 per un XBOX o un devkit Playstation, l'unica console che puoi sviluppare è l'XBOX 360, e l'unico modo per farlo è con XNA.

Per lo sviluppo professionale, a meno che tu non abbia davvero bisogno di ottenere il 100% della potenza di elaborazione di XBOX (di cui la maggior parte dei giochi, in particolare i giochi 2D non hanno bisogno), XNA secondo me in realtà è molto meglio per lo sviluppo.

Alcuni errori che altri risponditori hanno commesso:

L'XBOX ha solo 3 core. Puoi accedere a tutti loro con XNA.

Ogni core ha hyperthreading e supporto per 2 hyperthreads. Puoi accedere solo a 4/6 thread. Uno di quei thread è per XNA. L'altro è un thread a cui nessuno sviluppatore di giochi ha accesso, poiché viene utilizzato dal sistema operativo XBOX.

C # su XBOX è molto più lento di C # su Windows. L'XBOX utilizza il CLR compatto .NET, che è molto leggero e privo di molte delle ottimizzazioni del CLR desktop. Le funzionalità di sicurezza di XBOX impediscono ai programmi di modificare il proprio codice sorgente. Ciò rende molto difficile persino consentire l'esecuzione del codice .NET, tanto meno l'esecuzione rapida . Parte di ciò che rende il codice gestito competitivo nelle prestazioni con il codice nativo C ++, è che il CLR può modificare il proprio codice per ottimizzare la coerenza della cache. Il team di sviluppo di XNA deve saltare attraverso alcuni cerchi piuttosto grandi solo per far funzionare C # sull'XBOX, e c'è un costo di prestazioni associato a questi cerchi.

Non devi essere TROPPO pigro con l'allocazione di memoria. XNA su Windows semplifica notevolmente l'allocazione della memoria, come ci si aspetterebbe da un ambiente gestito. Tuttavia, su XBOX, il CLR compatto .NET utilizza un approccio ampio e compatto alla garbage collection, e l'approccio tipico per prevenire la balbuzie nel gioco a causa delle raccolte è di evitare del tutto le raccolte. Ciò richiede l'utilizzo di pool di oggetti per le classi e l'utilizzo di strutture per oggetti più piccoli, in cui normalmente si utilizzano le classi in ambiente Windows. Il pooling di oggetti richiede generalmente un modello allocato / libero di gestione degli oggetti, che non è peggio (e forse un po 'meglio) della gestione della memoria C ++.

Detto questo, lo sviluppo in C # / XNA è ancora molte volte più veloce e più facile dello sviluppo in C ++ senza un'API DirectX (che è XNA).

Ecco lo stato di un gioco che sto realizzando in XNA, dopo 4 settimane di lavoro:

Schermata del gioco dopo 4 settimane di sviluppo.

Ciò dovrebbe darti un'idea di quanto lo sviluppo incredibilmente veloce con la libreria / API XNA sia in combinazione con C #.

Quel screenshot è reso dall'XBOX a circa 65FPS.

Se sei uno sviluppatore di giochi per hobby e vuoi creare giochi per una console, non solo XNA + XBOX è la tua unica opzione realistica, ma è anche un'opzione piuttosto sorprendente, un divertente ambiente di sviluppo e molti giochi XBOX Live Arcade sono stati fatto con XNA e fatto centinaia di migliaia di dollari facendolo. ( Limbo per esempio.)


1
Una delle risposte più chiare che ho avuto su XNA dev. Grazie.
keyle,

4

XNA è una lama a doppio taglio; è relativamente facile da usare, ma molto estensibile e personalizzabile. Il problema è che, basandosi su un linguaggio gestito e avere un'implementazione così compatta di Compact Framework, spremere alcune prestazioni da un gioco complesso può essere molto doloroso e frustrante.

Puoi distribuirlo sulla tua Xbox solo tramite C # / XNA o tramite C ++ / DirectX, ma la seconda opzione richiede la qualificazione per una licenza XBLA e il pagamento del devkit, che può essere molto costoso (~ 10000 $).

E ricorda che Xbox è un sistema chiuso. Dimentica qualsiasi interazione TCP / IP diretta, puoi comunicare solo con altre console presenti in Xbox Live! rete e non è possibile eseguire connessioni HTTP non elaborate.

Quindi, se stai pensando a un gioco, prova XNA e passa a un devkit se hai bisogno di più potere grezzo (e hai i soldi). Se stai pensando a un'applicazione ... scegli come target un'altra piattaforma.


Mi chiedo quanto siano diversi XNA e devkit ...
Spooks,

XNA è un'API C # di alto livello. Un devkit è una console speciale in cui è possibile distribuire giochi scritti con C ++ e DirectX, con un accesso di livello inferiore e prestazioni complessivamente migliori.
r2d2rigo,

così .. completamente diverso
Spooks
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.