Ist XNA gut für die berufliche Weiterentwicklung der Xbox 360?

16

Ich möchte mit der Entwicklung für meine Xbox 360 beginnen und habe von dem XNA-Framework gehört, das sowohl für den PC als auch für die Xbox geeignet ist. Dies klingt nach einer attraktiven Option, da meine Kunden das Spiel / die App auch auf normalen Computern verwenden können.

Allerdings bin ich sehr neu in der Xbox-Szene. Ist XNA nur für Hobbyanwender gedacht und wird es nicht für die semiprofessionelle oder Unternehmensanwendungsentwicklung empfohlen? Fehlen XNA die Fähigkeiten einer von C ++ entwickelten Lösung oder verringert sie die Leistung eines auf der Xbox ausgeführten Spiels / einer auf der Xbox ausgeführten App erheblich?

Ist es möglich, die Xbox mit C # und ohne XNA auszurichten? Was sind die Vorteile?

Low-Level-Programmierung würde in C ++ direkt mit DirectX arbeiten. Was sind die Vorteile?

Robinicks
quelle

Antworten:

15

Die kurze Antwort: Ja .

XNA ist nur ein Werkzeug. Es eignet sich für alle Spiele mit Ausnahme der prozessor- und grafikintensivsten. Wenn Sie XNA für ein Xbox 360-Spiel in Betracht ziehen, werden Sie Folgendes verpassen:

  • Zugriff auf die SIMD / Vector-Einheit für wirklich schnelle CPU-Gleitkomma-Berechnungen
  • Möglichkeit zur Verwendung von muttersprachlichem Code, der wahrscheinlich etwas schneller als C # sein wird
  • Die Fähigkeit, zu sein ein wenig etwas fauler mit , wie Sie Speicher zuweisen
  • XBLIG-Spiele haben nur Zugriff auf 4 der 6 Kerne (aber wir haben immer noch alle 3 CPUs und sie sind auch nicht voll, so dass wir nicht viel verpassen) - nicht sicher, ob dies für Nicht-XBLIG-XNA gilt Spiele
  • Voller DirectX-Zugriff für wirklich unübersichtliche grafische Tricks

Es könnte noch mehr geben - das ist mir ein Rätsel.

(Spekulation: Wenn Sie sind ein professioneller Entwickler (wie in: eine devkit), ich denke , dass Sie XNA mit nativen Code verwenden können, gleich wie P / Invoke auf Windows Das Beste aus beiden Welten Sie würden Microsoft fragen... Siehe auch XDK .)

Das Fazit ist, dass ein XNA-Spiel fast so schnell ist wie ein natives Spiel und fast so viel kann. Ich würde vorschlagen, dass Sie es verwenden, es sei denn, Sie finden einen zwingenden Grund, dies nicht zu tun.

Ich weiß nicht, ob es irgendeine Art von verwaltetem DirectX für die 360 ​​gibt. Vielleicht ist SlimDX ein guter Anfang.

Andrew Russell
quelle
1
Was ist "XBLIG"?
Ricket
2
Xbox Live-Indie-Spiel
dotminic
Es gibt nur 3 Kerne, und wir haben Zugriff auf alle. Sie erhalten keinen Zugriff auf 2 Threads. Einer dieser Threads ist für XNA, der andere ist ein Thread, auf den niemand Zugriff hat, wenn Spiele erstellt werden, wie es für das XBOX-Betriebssystem der Fall ist.
Olhovsky
1
Außerdem können Sie mit der Speicherzuweisung nicht faul sein. Mit Ausnahme von sehr einfachen Spielen müssen Sie alle Objekte bündeln (was ein Modell vom Typ Allocation / Free beinhaltet - nicht besser als C ++), um teure Garbage Collections in der .NET Compact CLR zu verhindern, die einen generationsübergreifenden Collection-Ansatz verwendet.
Olhovsky
12

Wenn Sie nicht bereit sind, 10.000 US-Dollar für ein XBOX- oder Playstation-Devkit zu zahlen, können Sie nur eine XBOX 360 entwickeln. Dies ist nur mit XNA möglich.

Für die professionelle Entwicklung ist XNA meiner Meinung nach viel besser für die Entwicklung, es sei denn, Sie benötigen wirklich 100% der Rechenleistung der XBOX (die die meisten Spiele, insbesondere 2D-Spiele, nicht benötigen).

Einige Fehler, die andere Antwortende gemacht haben:

Die XBOX hat nur 3 Kerne. Mit XNA haben Sie Zugriff auf alle.

Jeder Core verfügt über Hyperthreading und unterstützt 2 Hyperthreads. Sie erhalten nur Zugriff auf 4/6 Threads. Einer dieser Threads ist für XNA. Der andere Thread ist ein Thread, auf den keine Spieleentwickler Zugriff haben, da er vom XBOX-Betriebssystem verwendet wird.

C # auf der XBOX ist viel langsamer als C # unter Windows. Die XBOX verwendet die kompakte .NET-CLR, die sehr leichtgewichtig ist und viele der Optimierungen der Desktop-CLR nicht bietet. Die XBOX-Sicherheitsfunktionen verhindern, dass Programme ihren eigenen Quellcode ändern. Das macht es sehr schwierig, .NET-Code überhaupt laufen zu lassen, geschweige denn, schnell zu laufen . Zu den Leistungsmerkmalen von verwaltetem Code im Vergleich zu nativem C ++ - Code gehört, dass die CLR ihren eigenen Code ändern kann, um die Cache-Kohärenz zu optimieren. Das XNA-Entwicklerteam muss durch einige ziemlich große Rahmen springen, um C # überhaupt auf der XBOX zum Laufen zu bringen, und mit diesen Rahmen sind Leistungskosten verbunden.

Sie werden nicht zu faul mit der Speicherzuweisung. XNA unter Windows vereinfacht die Speicherzuweisung erheblich, wie Sie es von einer verwalteten Umgebung erwarten. Auf der XBOX verwendet die .NET-Kompakt-CLR jedoch einen Sweep & Compact-Ansatz für die Garbage-Collection. Der typische Ansatz zur Verhinderung von Spielstörungen aufgrund von Collections besteht darin, Collections insgesamt zu vermeiden. Dies erfordert die Verwendung von Objektpools für Ihre Klassen und von Strukturen für kleinere Objekte, bei denen Sie normalerweise Klassen in der Windows-Umgebung verwenden würden. Das Poolen von Objekten erfordert im Allgemeinen ein Allokations- / freies Modell der Objektverwaltung, das nicht schlechter (und vielleicht ein bisschen besser) ist als die C ++ - Speicherverwaltung.

Trotzdem ist die Entwicklung in C # / XNA um ein Vielfaches schneller und einfacher als die Entwicklung in C ++ ohne DirectX-API (die XNA ist).

Hier ist der Status eines Spiels, das ich in XNA nach 4 Wochen Arbeit mache:

Screenshot des Spiels nach 4 Wochen Entwicklungszeit.

Das sollte Ihnen ein Gefühl dafür vermitteln, wie unglaublich schnell die Entwicklung mit der XNA-Bibliothek / API in Kombination mit C # ist.

Dieser Screenshot wird von der XBOX mit ca. 65FPS gerendert.

Wenn Sie ein begeisterter Spieleentwickler sind und Spiele für eine Konsole entwickeln möchten, ist XNA + XBOX nicht nur Ihre einzige realistische Option, sondern auch eine erstaunliche Option, eine unterhaltsame Entwicklungsumgebung und viele XBOX Live Arcade-Spiele mit XNA gemacht und dabei Hunderttausende von Dollar verdient. ( Limbo zum Beispiel.)

Olhovsky
quelle
1
Eine der klarsten Antworten, die ich über den XNA-Entwickler hatte. Vielen Dank.
Keyle
4

XNA ist eine zweischneidige Klinge; Es ist relativ einfach zu bedienen, aber sehr erweiterbar und anpassbar. Das Problem besteht darin, dass es sehr schmerzhaft und frustrierend sein kann, die Leistung eines komplexen Spiels zu beeinträchtigen, wenn es auf einer verwalteten Sprache basiert und eine so gut wie kompakte Framework-Implementierung hat.

Sie können Ihre Xbox nur über C # / XNA oder über C ++ / DirectX bereitstellen. Für die zweite Option müssen Sie sich jedoch für eine XBLA-Lizenz qualifizieren und für das Devkit bezahlen, was sehr teuer sein kann (~ 10000 $).

Und denken Sie daran, dass die Xbox ein geschlossenes System ist. Vergessen Sie direkte TCP / IP-Interaktionen. Sie können nur mit anderen Konsolen kommunizieren, die in Xbox Live! Netzwerk, und Sie können keine rohen HTTP-Verbindungen tun.

Wenn Sie also an ein Spiel denken, probieren Sie XNA aus und wechseln Sie zu einem Devkit, wenn Sie mehr Rohleistung benötigen (und das Geld haben). Wenn Sie an eine Anwendung denken ... zielen Sie einfach auf eine andere Plattform.

r2d2rigo
quelle
Ich frage mich, wie unterschiedlich XNA und das Devkit sind ...
Spooks
XNA ist eine C # -API auf hoher Ebene. Ein Devkit ist eine spezielle Konsole, auf der Sie Spiele bereitstellen können, die mit C ++ und DirectX geschrieben wurden, wodurch der Zugriff auf eine niedrigere Ebene und die Leistung insgesamt verbessert werden.
r2d2rigo
also .. ganz anders
Spooks