sample-game y compilarlo para las consolas XBOX Series X|S. Después, implementará el juego completo en un kit de desarrollo de XBOX, diagnosticará errores de inicio y creará un XVC instalable.
El ejemplo completado usa C++, Direct3D 12 y el GDK con extensiones de XBOX (GDKX). También usa DirectXTK12 como asistente de representación opcional. Ambas paletas están controladas por el equipo, de modo que el juego puede ejecutarse sin supervisión mientras itera en los gráficos, la jugabilidad y los efectos.
Lo que va a compilar
Al final de este tutorial, tendrá:- Un proyecto nativo del GDK de XBOX (no un proyecto de UWP).
- Configuraciones Debug, Profile y Release para las consolas XBOX Series X|S y las consolas de la familia XBOX One.
- Un juego de ejemplo con reproducción automática, con puntuación, IA predictiva de las paletas, efectos de partículas, una estela de movimiento y un disco circular con textura.
- Una implementación completa de archivos sueltos en ejecución en un kit de desarrollo de XBOX.
- Un XVC opcional asociado a la Store que puede instalarse y probarse en el kit de desarrollo.
Antes de empezar
Este tutorial se validó con:- Visual Studio 2022 Enterprise 17.14.
- GDKX de April 2026 Update 2, edición
260402. Gaming.XBOX.Scarlett.x64para las consolas XBOX Series X|S.Gaming.XBOX.XboxOne.x64para las consolas de la familia XBOX One.- Confirmación
e656d54637b2830fc6eb5ecd9b329a9c72cb87d4de DirectXTK12.
260402 si sigue el tutorial con otra versión.
Paso 1: Cree la carpeta de trabajo
Abra PowerShell y cree una carpeta raíz vacía.DeviceResources.*, Main.cpp, pch.*, StepTimer.h y los archivos PNG visuales del shell a partir de la plantilla Direct3D 12 XBOX Game. Conserve esos archivos generados al agregar el código fuente específico del ejemplo.
Paso 2: Compruebe la instalación del GDK de XBOX
Abra el XBOX Series X|S VS 2022 Gaming Command Prompt instalado con GDKX. El acceso directo suele estar en Microsoft GDK en el menú Inicio. También puede inicializar el entorno desde un símbolo del sistema normal:GXDKEDITIONestá vacío.- Falta el acceso directo al símbolo del sistema de XBOX.
- Visual Studio no muestra las plantillas de proyecto de XBOX.
- La plataforma de MSBuild
Gaming.XBOX.Scarlett.x64no está disponible. - No se encuentran
xbconnectnixbapp.
Paso 3: Cree un proyecto de XBOX nativo
1
Abra Visual Studio 2022 y seleccione Create a new project
Establezca Language en C++, Platform en XBOX y Project type en Games.
2
Seleccione Direct3D 12 XBOX Game
Establezca el nombre del proyecto en
sample-game y la ubicación en D:\repos\sample-game.3
Deje desactivada la opción Place solution and project in the same directory
De este modo, la solución queda en la raíz y el proyecto en
D:\repos\sample-game\sample-game.4
Cree el proyecto
d3d12game_gx es una técnica de recuperación, no el flujo de trabajo recomendado para nuevos proyectos.
Confirme que el proyecto no es UWP
Antes de agregar el código del juego, compruebe que el proyecto:- Contiene
MicrosoftGameConfig.mgc. - Usa una plataforma de proyecto
Gaming.XBOX.*.x64. - Se vincula con las bibliotecas de plataforma del GDK de XBOX.
- No usa
Package.appxmanifestcomo configuración del título. - Se creó a partir de Direct3D 12 XBOX Game, no de una plantilla de Windows universal.
Paso 4: Fije la edición del GDK y configure los destinos de consola
Fijar la edición del GDK evita que una futura instalación del GDK cambie de forma silenciosa la cadena de herramientas usada por el proyecto. En el grupo de propiedades principal desample-game.vcxproj, establezca:
Si el título solo admite las consolas XBOX Series X|S, puede omitir las configuraciones de las consolas de la familia XBOX One. Consulte Desarrollo entre generaciones para publicar el mismo título en varias generaciones.
Paso 5: Compile la plantilla sin modificar
Compile la plantilla generada antes de agregar dependencias o código del juego. Esto aísla los problemas de la cadena de herramientas de los problemas introducidos por el ejemplo. Desde un XBOX Series X|S VS 2022 Gaming Command Prompt:Paso 6: Agregue DirectXTK12 como asistente opcional
DirectXTK12 no es necesario para crear un título de GDK. La plantilla del GDK de XBOX ya proporciona el dispositivo Direct3D 12, la cola de comandos, la cadena de intercambio y el bucle de juego necesarios para compilar un juego directamente con Direct3D 12. Este ejemplo usa la biblioteca independiente de código abierto DirectXTK12 de Microsoft. La biblioteca reduce la cantidad de código auxiliar de representación de bajo nivel necesario para la representación de sprites, la administración de descriptores, la carga de texturas, la carga de recursos y la administración de la memoria gráfica. Un título puede reemplazar estos asistentes por su propio motor o por una implementación directa de D3D12. Clone DirectXTK12 en el proyecto:- Agregue
external\DirectXTK12\DirectXTK_GDKX_2022.vcxproja la solución. - Agregue DirectXTK12 como referencia de proyecto desde
sample-game. - Agregue
$(SolutionDir)external\DirectXTK12\Inca los directorios de inclusión. - Compile ambos proyectos para la misma plataforma y configuración de XBOX.
sample-game usa esta propiedad:
CompileShaders.cmd mediante una ruta explícita relativa al proyecto:
Paso 7: Agregue el código del juego
El ejemplo separa el estado de la jugabilidad de la representación, de modo que la simulación pueda ajustarse sin cambiar el código de Direct3D. Conserve los archivos generados por la plantilla, incluidosDeviceResources.*, Main.cpp, pch.*, StepTimer.h y los cinco archivos PNG visuales del shell. Agregue al proyecto estos archivos específicos del ejemplo:
Use un paso de simulación fijo
El proyecto usa elStepTimer de la plantilla con una actualización fija de 120 Hz. Un paso fijo mantiene estables la respuesta a las colisiones y el comportamiento de la IA cuando los tiempos de fotograma varían.
La simulación contiene:
- Los estados de dos paletas.
- El estado de un disco circular.
- Las puntuaciones de los lados izquierdo y derecho.
- Un retraso de saque y una dirección de saque alternante.
- Eventos de impacto para las colisiones con las paletas, las paredes y las porterías.
Implemente la colisión del disco circular
Trate cada paleta como un rectángulo alineado con los ejes y el disco como un círculo:- Busque el punto del rectángulo de la paleta más cercano al centro del disco.
- Mida la distancia al cuadrado desde ese punto hasta el centro del disco.
- Se produjo una colisión si la distancia no es mayor que el radio del disco al cuadrado.
- Mueva el disco fuera de la paleta para evitar superposiciones repetidas.
- Calcule el ángulo de salida a partir del desplazamiento del golpe y la velocidad de la paleta.
- Aumente ligeramente la velocidad del disco, hasta un máximo.
Agregue la reproducción automática predictiva
Cada paleta:- Predice dónde intersecará el disco con su posición horizontal.
- Refleja la coordenada prevista en las paredes superior e inferior de la arena.
- Actualiza su objetivo a un intervalo de reacción fijo.
- Usa límites de aceleración y velocidad máxima en lugar de desplazamientos instantáneos.
- Agrega un pequeño error de puntería determinista.
Represente la escena con DirectXTK12
Cree:GraphicsMemory.- Un montón de descriptores que contenga una textura blanca y la textura del disco.
- Un
SpriteBatchcon alfa normal. - Un
SpriteBatchaditivo para las partículas. - Texturas DDS mediante
ResourceUploadBatchyCreateDDSTextureFromFile.
SpriteBatch. Dibuje las partículas en la pasada aditiva.
El ejemplo completado se representa en un sistema de coordenadas virtuales de 1920 por 1080 y escala esa escena a la ventanilla de salida.
Mantenga los efectos contenidos
El ajuste final usó:- Una sacudida de pantalla breve con decaimiento exponencial.
- Partículas de impacto más pequeñas con forma de estela.
- Más partículas en los golpes de paleta que en los golpes de pared.
- Una explosión más intensa para un gol.
- Una estela del disco con alfa bajo.
- Un breve destello verde de impacto.
Paso 8: Cree e implemente los recursos de textura
El ejemplo necesita:Assets\white.dds: una textura RGBA blanca de 1 por 1 usada para dibujar rectángulos y partículas.Assets\xbox_logo.dds: una textura RGBA de 256 por 256 usada para el disco.
- Carga el logotipo de origen.
- Cambia su tamaño a 256 por 256.
- Aplica una máscara alfa circular difuminada.
- Escribe un DDS RGBA8 con un encabezado DX10.
- Crea el DDS blanco de 1 por 1.
sample-game.vcxproj:
Un archivo DDS que usa el encabezado estándar más una extensión DX10 tiene 148 bytes antes de los datos de píxeles. Durante la sesión original, un escritor de DDS personalizado emitió 152 bytes y el título falló durante la carga de texturas con
0x8007000D. Si usa un escritor de DDS personalizado, valide la disposición del encabezado antes de la implementación.Paso 9: Compile el juego
Desde el XBOX Series X|S VS 2022 Gaming Command Prompt:sample-game.exeMicrosoftGame.config- Los archivos PNG visuales del shell
Assets\white.ddsAssets\xbox_logo.dds- Los archivos DLL en tiempo de ejecución necesarios
- La imagen de Game OS u otros metadatos de implementación producidos por la compilación
MicrosoftGameConfig.mgc. El elemento de compilación MGCCompile del GDK lo valida y emite MicrosoftGame.config en la salida de la compilación. La implementación y el empaquetado usan el archivo .config generado. Consulte Configuración del juego.
Paso 10: Conéctese al kit de desarrollo de XBOX
Establezca la consola predeterminada con su dirección IP de herramientas o su nombre de host:Paso 11: Implemente el juego completo
Implemente toda la carpeta de salida de la compilación:xbapp list después de la implementación para encontrar el nombre completo del paquete registrado y el identificador de modelo de usuario de aplicación (AUMID). El AUMID termina con !Game.
Paso 12: Inicie y verifique el juego
Inicie exactamente el AUMID que notificóxbapp list:
Paso 13: Diagnostique un error de inicio inmediato
Si el juego se cierra inmediatamente, no dé por hecho que la implementación se realizó correctamente porque se copió el ejecutable.Obtenga el último resultado del título
Supervise la salida de depuración
Inicie un monitor de salida de depuración en un símbolo del sistema:OutputDebugStringA en torno a:
- La inicialización del juego.
- La creación de recursos de DirectXTK12.
- Cada carga de textura.
- La creación de la canalización de sprites.
- La finalización de la carga de texturas.
- Las excepciones de fotograma.
white.dds. El cargador devolvió 0x8007000D, lo que identificó datos DDS con formato incorrecto. Corregir el encabezado DDS y realizar una implementación completa limpia solucionó el inicio.
Para obtener más diagnósticos de inicio, ejecute xbWatson mientras reproduce el error. Consulte también Control de errores.
Paso 14: Itere de forma segura
Para la mayoría de los cambios solo de código:- Compile Debug.
- Termine el paquete en ejecución.
- Implemente la carpeta de salida completa.
- Inicie el AUMID registrado.
- Consulte el estado del paquete.
MicrosoftGameConfig.mgc, los recursos o los metadatos de implementación, desinstale la implementación suelta anterior antes de volver a implementar. Esto evita que archivos o datos de registro obsoletos oculten una corrección.
Opcional: Cree y pruebe un XVC
La implementación suelta es el bucle de desarrollo más rápido. Cree un XVC cuando necesite probar una instalación similar a la comercial o preparar un paquete para Partner Center. Consulte Empaquetado para obtener la referencia completa de empaquetado.Asocie MicrosoftGame.config a Partner Center
Obtenga estos valores en Game setup > Identity details del producto:- Package Identity Name.
- Package Identity Publisher.
- Publisher Display Name.
- Store ID.
- XBOX Title ID.
- MSA App ID.
TargetDeviceFamily="Scarlett" es obligatorio para el paquete de las consolas XBOX Series X|S. Use una configuración independiente para un paquete de las consolas de la familia XBOX One.
Compile la configuración Release
Prepare el contenido del paquete
Copie la salida de Release en un directorio de almacenamiento provisional, pero mantengagameos.xvd fuera del mapa de contenido y no incluya los archivos PDB como contenido normal del paquete.
Genere el diseño
Cree un paquete de prueba para el kit de desarrollo
El cifrado de prueba predeterminado es útil para la instalación local en el kit de desarrollo:Use el cifrado de envío para un paquete de Partner Center
Produzca primero el paquete de sample-game con el cifrado de prueba del kit de desarrollo para poder verificar la instalación y el inicio. Para un paquete que vaya a enviar, siga la directiva de empaquetado actual y use/lk o /l.
El flujo de trabajo repetible recomendado con /lk es:
