sample-game et le compiler pour les consoles XBOX Series X|S. Vous déployez ensuite le jeu complet sur un dev kit XBOX, diagnostiquez les échecs au démarrage et créez un XVC installable.
L’exemple terminé utilise C++, Direct3D 12 et le GDK avec les XBOX Extensions (GDKX). Il utilise également DirectXTK12 comme assistant de rendu facultatif. Les deux raquettes sont contrôlées par l’ordinateur afin que le jeu puisse tourner sans surveillance pendant que vous itérez sur les graphismes, le gameplay et les effets.
Ce que vous allez créer
À la fin de cette procédure, vous disposerez de :- 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 autoplay avec score, IA prédictive des raquettes, effets de particules, traînée de mouvement et palet circulaire texturé.
- Un déploiement complet en fichiers libres (loose) s’exécutant sur un dev kit XBOX.
- Un XVC facultatif associé au Store, pouvant être installé et testé sur le dev kit.
Avant de commencer
Cette procédure a été validée 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 la procédure 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 du shell à partir du modèle Direct3D 12 XBOX Game. Conservez ces fichiers générés lors de l’ajout des sources spécifiques à l’exemple.
Étape 2 : vérifier l’installation du GDK XBOX
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 d’invite de commandes XBOX est absent.
- Visual Studio n’affiche pas les modèles de projet XBOX.
- La plateforme MSBuild
Gaming.XBOX.Scarlett.x64n’est pas disponible. xbconnectouxbappest introuvable.
Étape 3 : créer un projet XBOX natif
1
Ouvrir Visual Studio 2022 et sélectionner Créer un nouveau projet
Définissez Langage sur C++, Plateforme sur XBOX et Type de projet sur Jeux.
2
Sélectionner Direct3D 12 XBOX Game
Définissez le nom du projet sur
sample-game et l’emplacement sur D:\repos\sample-game.3
Laisser décochée l'option Placer la solution et le projet dans le même répertoire
Ainsi, la solution est à 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 du code de jeu, vérifiez que le projet :- Contient
MicrosoftGameConfig.mgc. - Utilise une plateforme de projet
Gaming.XBOX.*.x64. - Est lié aux bibliothèques de plateforme du GDK XBOX.
- N’utilise pas
Package.appxmanifestcomme configuration de titre. - A été créé à partir de Direct3D 12 XBOX Game, et non d’un modèle Universal Windows.
Étape 4 : épingler l’édition du GDK et configurer les cibles console
Épingler l’édition du GDK évite qu’une future installation du GDK ne change 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 pour les consoles de la famille XBOX One. Consultez Cross-gen pour publier 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 du code de 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 assistant facultatif
DirectXTK12 n’est pas nécessaire 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 swap chain et la boucle de jeu nécessaires pour développer un jeu directement avec Direct3D 12. Cet exemple utilise la bibliothèque open source distincte de Microsoft, DirectXTK12. Cette bibliothèque réduit la quantité de code utilitaire de rendu de bas niveau requise pour le rendu de sprites, la gestion des descripteurs, le chargement de textures, l’envoi (upload) de ressources et la gestion de la mémoire graphique. Un titre peut remplacer ces assistants par son propre moteur ou 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 via un chemin explicite relatif au projet :
Étape 7 : ajouter le code du jeu
L’exemple sépare l’état du gameplay 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, notammentDeviceResources.*, Main.cpp, pch.*, StepTimer.h et les cinq fichiers PNG visuels du shell. Ajoutez au projet ces fichiers spécifiques à l’exemple :
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 réponse aux collisions et le comportement de l’IA stables lorsque les temps de trame varient.
La simulation contient :
- Deux états de raquette.
- Un état de palet circulaire.
- Les scores des côtés gauche et droit.
- Un délai de service et une direction de service alternée.
- Des événements d’impact pour les collisions avec les raquettes, les murs et les buts.
Implémenter la collision du palet circulaire
Traitez chaque raquette comme un rectangle aligné sur les axes et le palet comme un cercle :- Trouvez le point du rectangle de la raquette le plus proche du centre du palet.
- Mesurez la distance au carré entre ce point et le centre du palet.
- Une collision s’est produite si la distance n’excède pas le rayon du palet au carré.
- Déplacez le palet hors de la raquette 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 raquette.
- Augmentez légèrement la vitesse du palet, jusqu’à un maximum.
Ajouter un autoplay prédictif
Chaque raquette :- Prédit l’endroit où le palet croisera sa position horizontale.
- Réfléchit la coordonnée prédite par rapport aux 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.
Rendre la scène avec DirectXTK12
Créez :GraphicsMemory.- Un tas de descripteurs contenant une texture blanche et la texture du palet.
- Un
SpriteBatchalpha normal. - Un
SpriteBatchadditif pour les particules. - Des textures DDS via
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 du viewport de sortie.
Garder des effets sobres
Le réglage final utilisait :- Un tremblement d’écran court à décroissance exponentielle.
- Des particules d’impact plus petites en forme de traînées.
- Plus de particules lors des impacts sur les raquettes que sur les murs.
- Une explosion plus marquée pour un but.
- Une traînée de palet à faible alpha.
- Un bref flash 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 le palet.
- 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. Lors de la session d’origine, un générateur DDS personnalisé produisait 152 octets et le titre échouait au chargement des textures avec
0x8007000D. Si vous utilisez un générateur DDS personnalisé, validez la structure 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 du shell
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 la valide et émet MicrosoftGame.config dans la sortie de build. Le déploiement et le packaging utilisent tous deux le fichier .config généré. Consultez Game config.
Étape 10 : se connecter au dev kit 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 l’intégralité du dossier de sortie de build :xbapp list après le déploiement pour trouver le nom complet du package enregistré 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 indiqué parxbapp list :
Étape 13 : diagnostiquer un échec de lancement immédiat
Si le jeu se ferme immédiatement, ne supposez 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 sprites.
- L’achèvement de l’envoi des textures.
- Les exceptions de trame.
white.dds. Le chargeur renvoyait 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ésolu le lancement.
Pour davantage 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 modifications limitées au code :- Compilez en Debug.
- Terminez le package en cours d’exécution.
- Déployez le dossier de sortie complet.
- Lancez l’AUMID enregistré.
- Interrogez l’état du package.
MicrosoftGameConfig.mgc, des ressources ou des métadonnées de déploiement, désinstallez l’ancien déploiement en fichiers libres avant de redéployer. Cela évite que des fichiers ou des données d’enregistrement obsolètes ne masquent un correctif.
Facultatif : créer et tester un XVC
Le déploiement en fichiers libres est la boucle de développement la plus rapide. Créez un XVC lorsque vous devez tester une installation de type commerciale ou préparer un package pour Partner Center. Consultez Packaging pour la référence complète du packaging.Associer MicrosoftGame.config à Partner Center
Obtenez ces valeurs dans 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 obligatoire pour le package des consoles XBOX Series X|S. Utilisez une configuration distincte pour un package destiné aux consoles de la famille XBOX One.
Compiler la configuration Release
Préparer le contenu du package
Copiez la sortie Release dans un répertoire de préparation (staging), mais laissezgameos.xvd hors de la carte de contenu et n’incluez pas les fichiers PDB comme contenu ordinaire du package.
Générer le layout
Créer un package de test pour dev kit
Le chiffrement de test par défaut est utile pour une installation locale sur dev kit :Utiliser le chiffrement de soumission pour un package Partner Center
Produisez d’abord le package sample-game avec le chiffrement de test pour dev kit afin de pouvoir vérifier l’installation et le lancement. Pour un package que vous soumettrez, suivez la politique de packaging en vigueur et utilisez/lk ou /l.
Le flux de travail /lk répétable recommandé est :
