Microsoft XNA est un ensemble d'outils avec un environnement d'exécution géré fourni par Microsoft qui facilite le développement et la gestion de jeux informatiques. XNA tente de libérer les développeurs de jeux de l'écriture de «code passe-partout répétitif» et de regrouper différents aspects de la production de jeux dans un seul système.
Il est conçu comme un framework - en fait, XNA est le Microsoft XNA Framework - donc techniquement ce n'est pas un moteur par son nom.
Il n'y a pas de «moteur» - si vous remarquez, vous dérivez votre classe principale de XNA.Framework.Game et devez remplacer vous-même les fonctions de dessin et de mise à jour. Il n'y a pas de système de rendu central, ni de système d'entrée, ni de système audio prêt à l'emploi. Il y a SpriteBatch et les classes vertex, il y a KeyboardState et il y a quelques classes audio..mais ce ne sont que des abstractions sur le code de dessin de bas niveau.
EDIT: Par souci d'utilité, pourquoi quelque chose importe-t-il s'il est étiqueté comme moteur, framework, bibliothèque ou ensemble d'outils?
Pour clarifier quelque peu les choses: je développe un moteur dans XNA. Évidemment, je ne peux pas faire ça dans quelque chose comme Unreal, comme Jonathan l'a mentionné. Cependant, il y a quelques choses qui me semblent importantes que XNA n'a tout simplement pas:
Plug-and-play: je veux pouvoir faire une sorte de modèle - avoir ce HP, ce mesh, cette animation et BOOM! J'ai un PNJ dans mon jeu.
Niveau bas caché - XNA le fait déjà, mais je ne veux pas jouer avec GameServiceProviders. Je veux juste mettre des trucs ensemble.
Jeu séparé du moteur - Il peut y avoir une classe «jeu», mais je veux séparer ma logique et mon code du système de base. Je ne veux pas if(player.hasitem(Item.SECRET_SWORD_OF_SECRETNESS)
mélanger la mise à jour des tampons sur mon rendu graphique.