sample-game et le compiler pour les consoles XBOX Series X|S. Vous déployez ensuite le jeu complet sur un kit de développement XBOX, diagnostiquez les échecs de démarrage et créez un XVC installable.
L’exemple terminé utilise C++, Direct3D 12 et le GDK avec les extensions XBOX (GDKX). Il utilise aussi DirectXTK12 comme utilitaire de rendu facultatif. Les deux palettes sont contrôlées par l’ordinateur, de sorte que le jeu peut fonctionner sans surveillance pendant que vous itérez sur les graphismes, la jouabilité et les effets.
Ce que vous allez créer
À la fin de ce tutoriel, vous aurez :- Un projet XBOX GDK natif (pas un projet UWP).
- Des configurations Debug, Profile et Release pour les consoles XBOX Series X|S et les consoles de la famille XBOX One.
- Un exemple de jeu en lecture automatique avec pointage, IA prédictive des palettes, effets de particules, traînée de mouvement et rondelle circulaire texturée.
- Un déploiement complet de fichiers non empaquetés en cours d’exécution sur un kit de développement XBOX.
- Un XVC facultatif associé au Store, pouvant être installé et testé sur le kit de développement.
Avant de commencer
Ce tutoriel a été validé avec :- Visual Studio 2022 Enterprise 17.14.
- GDKX April 2026 Update 2, édition
260402. Gaming.XBOX.Scarlett.x64pour les consoles XBOX Series X|S.Gaming.XBOX.XboxOne.x64pour les consoles de la famille XBOX One.- DirectXTK12, commit
e656d54637b2830fc6eb5ecd9b329a9c72cb87d4.
260402 si vous suivez le tutoriel avec une autre version.
Étape 1 : Créer le dossier de travail
Ouvrez PowerShell et créez un dossier racine vide.DeviceResources.*, Main.cpp, pch.*, StepTimer.h et les fichiers PNG visuels de l’interface à partir du modèle Direct3D 12 XBOX Game. Conservez ces fichiers générés lorsque vous ajoutez le code source propre à l’exemple.
Étape 2 : Vérifier l’installation du XBOX GDK
Ouvrez l’invite XBOX Series X|S VS 2022 Gaming Command Prompt installée avec le GDKX. Le raccourci se trouve normalement sous Microsoft GDK dans le menu Démarrer. Vous pouvez aussi initialiser l’environnement à partir d’une invite de commandes ordinaire :GXDKEDITIONest vide.- Le raccourci de l’invite de commandes XBOX est manquant.
- Visual Studio n’affiche pas les modèles de projet XBOX.
- La plateforme MSBuild
Gaming.XBOX.Scarlett.x64n’est pas disponible. xbconnectouxbappsont introuvables.
Étape 3 : Créer un projet XBOX natif
1
Ouvrir Visual Studio 2022 et sélectionner Create a new project
Définissez Language à C++, Platform à XBOX et Project type à Games.
2
Sélectionner Direct3D 12 XBOX Game
Définissez le nom du projet à
sample-game et l’emplacement à D:\repos\sample-game.3
Laisser Place solution and project in the same directory décochée
Ainsi, la solution se trouve à la racine et le projet dans
D:\repos\sample-game\sample-game.4
Créer le projet
d3d12game_gx est une technique de récupération, pas le flux de travail recommandé pour un nouveau projet.
Confirmer que le projet n’est pas UWP
Avant d’ajouter le code du jeu, vérifiez que le projet :- Contient
MicrosoftGameConfig.mgc. - Utilise une plateforme de projet
Gaming.XBOX.*.x64. - Se lie aux bibliothèques de plateforme du XBOX GDK.
- N’utilise pas
Package.appxmanifestcomme configuration du titre. - A été créé à partir de Direct3D 12 XBOX Game, et non d’un modèle Universal Windows.
Étape 4 : Figer l’édition du GDK et configurer les cibles console
Figer l’édition du GDK empêche une future installation du GDK de modifier silencieusement la chaîne d’outils utilisée par le projet. Dans le groupe de propriétés principal desample-game.vcxproj, définissez :
Si le titre ne prend en charge que les consoles XBOX Series X|S, vous pouvez omettre les configurations des consoles de la famille XBOX One. Voir Intergénérationnel pour livrer le même titre sur plusieurs générations.
Étape 5 : Compiler le modèle non modifié
Compilez le modèle généré avant d’ajouter des dépendances ou le code du jeu. Cela permet d’isoler les problèmes de chaîne d’outils des problèmes introduits par l’exemple. Depuis une invite XBOX Series X|S VS 2022 Gaming Command Prompt :Étape 6 : Ajouter DirectXTK12 comme utilitaire facultatif
DirectXTK12 n’est pas requis pour créer un titre GDK. Le modèle XBOX GDK fournit déjà le périphérique Direct3D 12, la file de commandes, la chaîne d’échange et la boucle de jeu nécessaires pour créer un jeu directement avec Direct3D 12. Cet exemple utilise la bibliothèque libre distincte DirectXTK12 de Microsoft. La bibliothèque réduit la quantité de code utilitaire de rendu de bas niveau requis pour le rendu des lutins (sprites), la gestion des descripteurs, le chargement des textures, le téléversement des ressources et la gestion de la mémoire graphique. Un titre peut remplacer ces utilitaires par son propre moteur ou par une implémentation D3D12 directe. Clonez DirectXTK12 dans le projet :- Ajoutez
external\DirectXTK12\DirectXTK_GDKX_2022.vcxprojà la solution. - Ajoutez DirectXTK12 comme référence de projet depuis
sample-game. - Ajoutez
$(SolutionDir)external\DirectXTK12\Incaux répertoires d’inclusion. - Compilez les deux projets pour la même plateforme et la même configuration XBOX.
sample-game utilise cette propriété :
CompileShaders.cmd par un chemin explicite relatif au projet :
Étape 7 : Ajouter le code du jeu
L’exemple sépare l’état de la jouabilité du rendu afin que la simulation puisse être ajustée sans modifier le code Direct3D. Conservez les fichiers générés par le modèle, y comprisDeviceResources.*, Main.cpp, pch.*, StepTimer.h et les cinq fichiers PNG visuels de l’interface. Ajoutez ces fichiers propres à l’exemple au projet :
Utiliser un pas de simulation fixe
Le projet utilise leStepTimer du modèle avec une mise à jour fixe à 120 Hz. Un pas fixe maintient la stabilité de la réponse aux collisions et du comportement de l’IA lorsque les temps de trame varient.
La simulation contient :
- Deux états de palette.
- Un état de rondelle circulaire.
- Les pointages des côtés gauche et droit.
- Un délai de mise au jeu et une direction de mise au jeu alternée.
- Des événements d’impact pour les collisions avec les palettes, les murs et les buts.
Implémenter la collision d’une rondelle circulaire
Traitez chaque palette comme un rectangle aligné sur les axes et la rondelle comme un cercle :- Trouvez le point du rectangle de la palette le plus proche du centre de la rondelle.
- Mesurez la distance au carré entre ce point et le centre de la rondelle.
- Une collision s’est produite si la distance n’est pas supérieure au rayon de la rondelle au carré.
- Déplacez la rondelle hors de la palette pour éviter les chevauchements répétés.
- Calculez l’angle de sortie à partir du décalage d’impact et de la vitesse de la palette.
- Augmentez légèrement la vitesse de la rondelle, jusqu’à un maximum.
Ajouter une lecture automatique prédictive
Chaque palette :- Prédit l’endroit où la rondelle croisera sa position horizontale.
- Réfléchit la coordonnée prédite sur les murs supérieur et inférieur de l’arène.
- Met à jour sa cible à un intervalle de réaction fixe.
- Utilise des limites d’accélération et de vitesse maximale plutôt qu’un positionnement instantané.
- Ajoute une petite erreur de ciblage déterministe.
Faire le rendu de la scène avec DirectXTK12
Créez :GraphicsMemory.- Un tas de descripteurs contenant une texture blanche et la texture de la rondelle.
- Un
SpriteBatchen alpha normal. - Un
SpriteBatchadditif pour les particules. - Des textures DDS par l’intermédiaire de
ResourceUploadBatchetCreateDDSTextureFromFile.
SpriteBatch. Dessinez les particules dans la passe additive.
L’exemple terminé effectue le rendu dans un système de coordonnées virtuel de 1920 par 1080 et met cette scène à l’échelle de la fenêtre d’affichage de sortie.
Garder des effets sobres
L’ajustement final utilisait :- Une courte secousse d’écran à décroissance exponentielle.
- Des particules d’impact plus petites en forme de traînées.
- Plus de particules lors des impacts sur les palettes que sur les murs.
- Une explosion plus marquée pour un but.
- Une traînée de rondelle à faible alpha.
- Un bref éclair d’impact vert.
Étape 8 : Créer et déployer les ressources de texture
L’exemple a besoin de :Assets\white.dds: une texture RGBA blanche de 1 par 1 utilisée pour dessiner les rectangles et les particules.Assets\xbox_logo.dds: une texture RGBA de 256 par 256 utilisée pour la rondelle.
- Charge le logo source.
- Le redimensionne à 256 par 256.
- Applique un masque alpha circulaire adouci.
- Écrit un DDS RGBA8 avec un en-tête DX10.
- Crée le DDS blanc de 1 par 1.
sample-game.vcxproj :
Un fichier DDS utilisant l’en-tête standard plus une extension DX10 comporte 148 octets avant les données de pixels. Durant la session originale, un rédacteur DDS personnalisé a émis 152 octets et le titre a échoué au chargement des textures avec
0x8007000D. Si vous utilisez un rédacteur DDS personnalisé, validez la disposition de l’en-tête avant le déploiement.Étape 9 : Compiler le jeu
Depuis l’invite XBOX Series X|S VS 2022 Gaming Command Prompt :sample-game.exeMicrosoftGame.config- Les fichiers PNG visuels de l’interface
Assets\white.ddsAssets\xbox_logo.dds- Les DLL d’exécution requises
- L’image Game OS ou les autres métadonnées de déploiement produites par la build
MicrosoftGameConfig.mgc. L’élément de build MGCCompile du GDK le valide et émet MicrosoftGame.config dans la sortie de la build. Le déploiement et l’empaquetage utilisent tous deux le fichier .config généré. Voir Configuration du jeu.
Étape 10 : Se connecter au kit de développement XBOX
Définissez la console par défaut à l’aide de son adresse IP Tools ou de son nom d’hôte :Étape 11 : Déployer le jeu complet
Déployez le dossier de sortie de build en entier :xbapp list après le déploiement pour trouver le nom complet du paquet inscrit et l’identifiant de modèle utilisateur d’application (AUMID). L’AUMID se termine par !Game.
Étape 12 : Lancer et vérifier le jeu
Lancez l’AUMID exact rapporté parxbapp list :
Étape 13 : Diagnostiquer un échec de lancement immédiat
Si le jeu se ferme immédiatement, ne présumez pas que le déploiement a réussi parce que l’exécutable a été copié.Obtenir le dernier résultat du titre
Surveiller la sortie de débogage
Démarrez un moniteur de sortie de débogage dans une invite de commandes :OutputDebugStringA autour de :
- L’initialisation du jeu.
- La création des ressources DirectXTK12.
- Chaque chargement de texture.
- La création du pipeline de lutins.
- La fin du téléversement des textures.
- Les exceptions de trame.
white.dds. Le chargeur retournait 0x8007000D, ce qui identifiait des données DDS mal formées. La correction de l’en-tête DDS et un déploiement complet propre ont réglé le lancement.
Pour plus de diagnostics de lancement, exécutez xbWatson pendant la reproduction de l’échec. Voir aussi Gestion des erreurs.
Étape 14 : Itérer en toute sécurité
Pour la plupart des changements limités au code :- Compilez en Debug.
- Terminez le paquet en cours d’exécution.
- Déployez le dossier de sortie complet.
- Lancez l’AUMID inscrit.
- Interrogez l’état du paquet.
MicrosoftGameConfig.mgc, aux ressources ou aux métadonnées de déploiement, désinstallez l’ancien déploiement non empaqueté avant de déployer à nouveau. Cela évite que des fichiers ou des données d’inscription périmés masquent un correctif.
Facultatif : Créer et tester un XVC
Le déploiement de fichiers non empaquetés est la boucle de développement la plus rapide. Créez un XVC lorsque vous devez tester une installation semblable à la vente au détail ou préparer un paquet pour Partner Center. Voir Empaquetage pour la référence complète sur l’empaquetage.Associer MicrosoftGame.config à Partner Center
Obtenez ces valeurs depuis Game setup > Identity details pour le produit :- Package Identity Name.
- Package Identity Publisher.
- Publisher Display Name.
- Store ID.
- XBOX Title ID.
- MSA App ID.
TargetDeviceFamily="Scarlett" est requis pour le paquet des consoles XBOX Series X|S. Utilisez une configuration distincte pour un paquet destiné aux consoles de la famille XBOX One.
Compiler la configuration Release
Préparer le contenu du paquet
Copiez la sortie Release dans un répertoire de préparation, mais gardezgameos.xvd hors de la carte de contenu et n’incluez pas les fichiers PDB comme contenu ordinaire du paquet.
Générer la disposition
Créer un paquet de test pour kit de développement
Le chiffrement de test par défaut est utile pour l’installation locale sur un kit de développement :Utiliser le chiffrement de soumission pour un paquet Partner Center
Produisez d’abord le paquet sample-game avec le chiffrement de test pour kit de développement afin de pouvoir vérifier l’installation et le lancement. Pour un paquet que vous allez soumettre, suivez la politique d’empaquetage en vigueur et utilisez/lk ou /l.
Le flux de travail /lk reproductible recommandé est :
