Microsoft XNA ist eine Reihe von Tools mit einer von Microsoft bereitgestellten verwalteten Laufzeitumgebung, die die Entwicklung und Verwaltung von Computerspielen erleichtert. XNA versucht, Spieleentwickler vom Schreiben von "Repetitive Boilerplate Code" zu befreien und verschiedene Aspekte der Spieleproduktion in einem einzigen System zu vereinen.
Es ist als Framework konzipiert - tatsächlich ist XNA das Microsoft XNA Framework - und technisch gesehen ist es keine Engine mit Namen.
Es gibt keine 'Engine' - wenn Sie bemerken, leiten Sie Ihre Hauptklasse von XNA.Framework.Game ab und müssen die Draw- und Update-Funktionen selbst überschreiben. Es gibt kein sofort einsatzbereites zentrales Rendering-System, Eingabesystem oder Audiosystem. Es gibt SpriteBatch und die Vertex-Klassen, es gibt KeyboardState und es gibt einige Audio-Klassen. Aber es handelt sich nur um Abstraktionen über den einfachen Zeichencode.
EDIT: Warum ist etwas aus Gründen der Nützlichkeit wichtig, wenn es als Engine, Framework, Bibliothek oder Toolset gekennzeichnet ist?
Um es etwas klarer zu machen: Ich entwickle eine Engine in XNA. Offensichtlich kann ich das in so etwas wie Unreal nicht tun, wie Jonathan es erwähnt hat. Es gibt jedoch ein paar Dinge, die für mich wichtig sind und die XNA einfach nicht hat:
Plug-n-Play: Ich möchte in der Lage sein, eine Art Vorlage zu erstellen - habe diese HP, dieses Mesh, diese Animation und BOOM! Ich habe einen NPC in meinem Spiel.
Hidden low level - XNA macht das schon, aber ich möchte nicht mit GameServiceProviders herumspielen. Ich will nur Sachen zusammenschieben.
Spiel von der Engine getrennt - Es gibt möglicherweise eine 'Spiel'-Klasse, aber ich möchte meine Logik und meinen Code vom Basissystem trennen. Ich möchte nicht if(player.hasitem(Item.SECRET_SWORD_OF_SECRETNESS)
mit dem Aktualisieren der Puffer in meinem Grafik-Renderer vermischt werden.