sample-game e compilá-lo para consoles XBOX Series X|S. Em seguida, você implanta o jogo completo em um dev kit XBOX, diagnostica falhas de inicialização e cria um XVC instalável.
O exemplo concluído usa C++, Direct3D 12 e o GDK com XBOX Extensions (GDKX). Ele também usa o DirectXTK12 como auxiliar de renderização opcional. As duas raquetes são controladas pelo computador, para que o jogo possa rodar sem supervisão enquanto você itera em gráficos, gameplay e efeitos.
O que você vai criar
Ao final deste passo a passo, você terá:- Um projeto nativo do XBOX GDK (não um projeto UWP).
- Configurações Debug, Profile e Release para consoles XBOX Series X|S e consoles da família XBOX One.
- Um jogo de exemplo em autoplay com pontuação, IA preditiva de raquete, efeitos de partículas, um rastro de movimento e um disco circular texturizado.
- Uma implantação completa de arquivos soltos (loose) em execução em um dev kit XBOX.
- Um XVC opcional associado à Store que pode ser instalado e testado no dev kit.
Antes de começar
Este passo a passo foi validado com:- Visual Studio 2022 Enterprise 17.14.
- GDKX April 2026 Update 2, edição
260402. Gaming.XBOX.Scarlett.x64para consoles XBOX Series X|S.Gaming.XBOX.XboxOne.x64para consoles da família XBOX One.- DirectXTK12 commit
e656d54637b2830fc6eb5ecd9b329a9c72cb87d4.
260402 se você estiver seguindo o passo a passo com outra versão.
Etapa 1: Crie a pasta de trabalho
Abra o PowerShell e crie uma pasta raiz vazia.DeviceResources.*, Main.cpp, pch.*, StepTimer.h e os arquivos PNG visuais do shell a partir do modelo Direct3D 12 XBOX Game. Mantenha esses arquivos gerados ao adicionar o código-fonte específico do exemplo.
Etapa 2: Verifique a instalação do XBOX GDK
Abra o XBOX Series X|S VS 2022 Gaming Command Prompt instalado com o GDKX. O atalho normalmente fica em Microsoft GDK no menu Iniciar. Você também pode inicializar o ambiente a partir de um prompt de comando comum:GXDKEDITIONestiver vazio.- O atalho do prompt de comando do XBOX estiver ausente.
- O Visual Studio não mostrar modelos de projeto XBOX.
- A plataforma MSBuild
Gaming.XBOX.Scarlett.x64não estiver disponível. xbconnectouxbappnão puderem ser encontrados.
Etapa 3: Crie um projeto XBOX nativo
1
Abra o Visual Studio 2022 e selecione Create a new project
Defina Language como C++, Platform como XBOX e Project type como Games.
2
Selecione Direct3D 12 XBOX Game
Defina o nome do projeto como
sample-game e o local como D:\repos\sample-game.3
Deixe Place solution and project in the same directory desmarcado
Assim, a solução fica na raiz e o projeto em
D:\repos\sample-game\sample-game.4
Crie o projeto
d3d12game_gx é uma técnica de recuperação, não o fluxo recomendado para um novo projeto.
Confirme que o projeto não é UWP
Antes de adicionar o código do jogo, verifique se o projeto:- Contém
MicrosoftGameConfig.mgc. - Usa uma plataforma de projeto
Gaming.XBOX.*.x64. - Faz o link com as bibliotecas de plataforma do XBOX GDK.
- Não usa
Package.appxmanifestcomo configuração do título. - Foi criado a partir de Direct3D 12 XBOX Game, não de um modelo Universal Windows.
Etapa 4: Fixe a edição do GDK e configure os alvos de console
Fixar a edição do GDK impede que uma instalação futura do GDK altere silenciosamente a cadeia de ferramentas usada pelo projeto. No grupo de propriedades principal emsample-game.vcxproj, defina:
Se o título oferecer suporte apenas a consoles XBOX Series X|S, você pode omitir as configurações dos consoles da família XBOX One. Consulte Cross-gen para lançar o mesmo título em várias gerações.
Etapa 5: Compile o modelo sem modificações
Compile o modelo gerado antes de adicionar dependências ou código do jogo. Isso isola problemas da cadeia de ferramentas de problemas introduzidos pelo exemplo. A partir de um XBOX Series X|S VS 2022 Gaming Command Prompt:Etapa 6: Adicione o DirectXTK12 como auxiliar opcional
O DirectXTK12 não é obrigatório para criar um título GDK. O modelo do XBOX GDK já fornece o dispositivo Direct3D 12, a fila de comandos, a swap chain e o loop de jogo necessários para compilar um jogo diretamente com o Direct3D 12. Este exemplo usa a biblioteca separada de código aberto da Microsoft DirectXTK12. A biblioteca reduz a quantidade de código utilitário de renderização de baixo nível necessário para renderização de sprites, gerenciamento de descritores, carregamento de texturas, upload de recursos e gerenciamento de memória gráfica. Um título pode substituir esses auxiliares por sua própria engine ou por uma implementação direta em D3D12. Clone o DirectXTK12 dentro do projeto:- Adicione
external\DirectXTK12\DirectXTK_GDKX_2022.vcxprojà solução. - Adicione o DirectXTK12 como referência de projeto a partir de
sample-game. - Adicione
$(SolutionDir)external\DirectXTK12\Incaos diretórios de include. - Compile ambos os projetos para a mesma plataforma e configuração XBOX.
sample-game usa esta propriedade:
CompileShaders.cmd por meio de um caminho explícito relativo ao projeto:
Etapa 7: Adicione o código do jogo
O exemplo separa o estado de gameplay da renderização para que a simulação possa ser ajustada sem alterar o código Direct3D. Mantenha os arquivos gerados pelo modelo, incluindoDeviceResources.*, Main.cpp, pch.*, StepTimer.h e os cinco arquivos PNG visuais do shell. Adicione ao projeto estes arquivos específicos do exemplo:
Use um passo de simulação fixo
O projeto usa oStepTimer do modelo com uma atualização fixa de 120 Hz. Um passo fixo mantém a resposta de colisão e o comportamento da IA estáveis quando os tempos de quadro variam.
A simulação contém:
- Dois estados de raquete.
- Um estado de disco circular.
- Pontuações para os lados esquerdo e direito.
- Um atraso de saque e direção de saque alternada.
- Eventos de impacto para colisões com raquete, parede e gol.
Implemente a colisão do disco circular
Trate cada raquete como um retângulo alinhado aos eixos e o disco como um círculo:- Encontre o ponto do retângulo da raquete mais próximo do centro do disco.
- Meça a distância ao quadrado desse ponto até o centro do disco.
- Ocorreu uma colisão se a distância não for maior que o raio do disco ao quadrado.
- Mova o disco para fora da raquete para evitar sobreposições repetidas.
- Calcule o ângulo de saída a partir do deslocamento do impacto e da velocidade da raquete.
- Aumente ligeiramente a velocidade do disco, até um máximo.
Adicione autoplay preditivo
Cada raquete:- Prevê onde o disco cruzará sua posição horizontal.
- Reflete a coordenada prevista nas paredes superior e inferior da arena.
- Atualiza seu alvo em um intervalo de reação fixo.
- Usa limites de aceleração e velocidade máxima em vez de saltar diretamente.
- Adiciona um pequeno erro de mira determinístico.
Renderize a cena com o DirectXTK12
Crie:GraphicsMemory.- Um heap de descritores contendo uma textura branca e a textura do disco.
- Um
SpriteBatchcom alfa normal. - Um
SpriteBatchaditivo para as partículas. - Texturas DDS por meio de
ResourceUploadBatcheCreateDDSTextureFromFile.
SpriteBatch. Desenhe as partículas na passada aditiva.
O exemplo concluído renderiza em um sistema de coordenadas virtual de 1920 por 1080 e dimensiona essa cena para o viewport de saída.
Mantenha os efeitos contidos
O ajuste final usou:- Um tremor de tela curto, com decaimento exponencial.
- Partículas de impacto menores em formato de risco.
- Mais partículas em impactos de raquete do que em impactos de parede.
- Uma explosão mais forte para um gol.
- Um rastro do disco com alfa baixo.
- Um breve flash verde de impacto.
Etapa 8: Crie e implante os assets de textura
O exemplo precisa de:Assets\white.dds: uma textura RGBA branca de 1 por 1 usada para desenhar retângulos e partículas.Assets\xbox_logo.dds: uma textura RGBA de 256 por 256 usada para o disco.
- Carrega o logotipo de origem.
- Redimensiona-o para 256 por 256.
- Aplica uma máscara de alfa circular com bordas suavizadas.
- Grava um DDS RGBA8 com cabeçalho DX10.
- Cria o DDS branco de 1 por 1.
sample-game.vcxproj:
Um arquivo DDS que usa o cabeçalho padrão mais a extensão DX10 tem 148 bytes antes dos dados de pixels. Durante a sessão original, um gravador de DDS personalizado emitiu 152 bytes e o título falhou durante o carregamento de textura com
0x8007000D. Se você usar um gravador de DDS personalizado, valide o layout do cabeçalho antes da implantação.Etapa 9: Compile o jogo
A partir do XBOX Series X|S VS 2022 Gaming Command Prompt:sample-game.exeMicrosoftGame.config- Os arquivos PNG visuais do shell
Assets\white.ddsAssets\xbox_logo.dds- As DLLs de runtime necessárias
- A imagem do Game OS ou outros metadados de implantação produzidos pela build
MicrosoftGameConfig.mgc. O item de build MGCCompile do GDK o valida e emite MicrosoftGame.config na saída da build. A implantação e o empacotamento usam o arquivo .config gerado. Consulte Game config.
Etapa 10: Conecte-se ao dev kit XBOX
Defina o console padrão usando o endereço IP de Ferramentas (Tools IP) ou o nome do host:Etapa 11: Implante o jogo completo
Implante toda a pasta de saída da build:xbapp list após a implantação para encontrar o nome completo do pacote registrado e o application user model ID (AUMID). O AUMID termina com !Game.
Etapa 12: Inicie e verifique o jogo
Inicie exatamente o AUMID informado porxbapp list:
Etapa 13: Diagnostique uma falha imediata na inicialização
Se o jogo sair imediatamente, não presuma que a implantação foi bem-sucedida só porque o executável foi copiado.Obtenha o último resultado do título
Monitore a saída de depuração
Inicie um monitor de saída de depuração em um prompt de comando:OutputDebugStringA em torno de:
- Inicialização do jogo.
- Criação de recursos do DirectXTK12.
- Cada carregamento de textura.
- Criação do pipeline de sprites.
- Conclusão do upload de texturas.
- Exceções de quadro.
white.dds. O carregador retornou 0x8007000D, o que identificou dados DDS malformados. Corrigir o cabeçalho DDS e realizar uma implantação completa limpa resolveu a inicialização.
Para mais diagnósticos de inicialização, execute o xbWatson enquanto reproduz a falha. Consulte também Tratamento de erros.
Etapa 14: Itere com segurança
Para a maioria das alterações somente de código:- Compile o Debug.
- Encerre o pacote em execução.
- Implante a pasta de saída completa.
- Inicie o AUMID registrado.
- Consulte o estado do pacote.
MicrosoftGameConfig.mgc, assets ou metadados de implantação, desinstale a implantação solta antiga antes de implantar novamente. Isso evita que arquivos ou dados de registro obsoletos escondam uma correção.
Opcional: Crie e teste um XVC
A implantação solta (loose) é o ciclo de desenvolvimento mais rápido. Crie um XVC quando precisar testar uma instalação semelhante à de varejo ou preparar um pacote para o Partner Center. Consulte Empacotamento para a referência completa de empacotamento.Associe o MicrosoftGame.config ao Partner Center
Obtenha estes valores em Game setup > Identity details do produto:- Package Identity Name.
- Package Identity Publisher.
- Publisher Display Name.
- Store ID.
- XBOX Title ID.
- MSA App ID.
TargetDeviceFamily="Scarlett" é obrigatório para o pacote de consoles XBOX Series X|S. Use uma configuração separada para um pacote de consoles da família XBOX One.
Compile a configuração Release
Prepare o conteúdo do pacote (staging)
Copie a saída Release para um diretório de staging, mas mantenhagameos.xvd fora do mapa de conteúdo e não inclua arquivos PDB como conteúdo comum do pacote.
Gere o layout
Crie um pacote de teste para dev kit
A criptografia de teste padrão é útil para instalação local no dev kit:Use criptografia de envio para um pacote do Partner Center
Produza primeiro o pacote do sample-game com a criptografia de teste do dev kit para poder verificar a instalação e a inicialização. Para um pacote que você vai enviar, siga a política de empacotamento vigente e use/lk ou /l.
O fluxo de trabalho /lk repetível recomendado é:
