> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Plantillas de proyecto en Visual Studio para el desarrollo de juegos de PC

> Plantillas de proyecto en Visual Studio para el desarrollo de juegos de PC

Este tema describe las plantillas de proyecto de juegos de Windows para PC que están disponibles en Visual Studio.

## Plantillas de proyecto

El Microsoft Game Development Kit (GDK) instala las siguientes plantillas de proyecto de C++ para Visual Studio.

* **Direct3D 12 Desktop Game (Classic):** un proyecto para un juego de Windows que usa Direct3D 12 y C++ con la plataforma x64 "estándar" de MSBuild.
* **Direct3D 12 Desktop Game:** un proyecto para un juego de Windows que usa Direct3D 12 y C++ con la plataforma personalizada Gaming.Desktop.x64 de MSBuild.
* **Direct3D 12 Desktop Game Makefile:** un proyecto para un juego de Windows que usa Direct3D 12 y C++ mediante un sistema de compilación externo.
* **Desktop Static Library:** un proyecto para una biblioteca estática de Windows con la plataforma personalizada Gaming.Desktop.x64 de MSBuild.
* **Desktop DLL:** un proyecto para una biblioteca de vínculos dinámicos de Windows con la plataforma personalizada Gaming.Desktop.x64 de MSBuild.

### Plantilla independiente

Como alternativa al uso de las plantillas del GDK instaladas para el desarrollo de escritorio y de dispositivos portátiles, existe una plantilla de proyecto totalmente independiente que usa el [administrador de paquetes vcpkg](https://aka.ms/vcpkg) para agregar las versiones empaquetadas del *Microsoft GDK*, el *DirectX 12 Agility SDK*, etc. Se puede usar como línea base para publicar en la Microsoft Store y en la XBOX PC App. Este paquete incluye una plantilla de proyecto tanto de MSBuild como de CMake, y requiere Visual Studio 2022 v17.6 o posterior.

Consulta el [Marketplace de Visual Studio](https://aka.ms/gdktemplates).

## Localización de las plantillas de proyecto del Microsoft Game Development Kit (GDK)

Localiza las plantillas del Microsoft Game Development Kit (GDK) buscando y filtrando en el cuadro de diálogo **Create a new project** de Visual Studio 2019 o Visual Studio 2022. Las plantillas del Microsoft Game Development Kit (GDK) se pueden encontrar filtrando por el lenguaje **C++**, la plataforma **Windows** y el tipo de proyecto **Games**, como se muestra en la siguiente captura de pantalla.

<img src="https://mintcdn.com/microsoft-4404708b/6TXzXmujKayly5Sf/images/gdk/tools/vs_2019_pc_templates.png?fit=max&auto=format&n=6TXzXmujKayly5Sf&q=85&s=69a6e437793926b85bda150574bff5f3" alt="Captura de pantalla del cuadro de diálogo Create a new project en Visual Studio 2019 para localizar las plantillas de juegos de Windows para PC" width="903" height="628" data-path="images/gdk/tools/vs_2019_pc_templates.png" />

## La plataforma Gaming.Desktop.x64, los archivos de msbuild y las propiedades

El Microsoft Game Development Kit (GDK) define una plataforma de msbuild denominada Gaming.Desktop.x64 que se usa para el desarrollo de juegos de Windows para PC. Gaming.Desktop.x64 incluye un conjunto de propiedades de msbuild y archivos de destinos que definen las directivas de preprocesador necesarias (como `_GAMING_DESKTOP`) y configuran las rutas de acceso de forma que, por ejemplo, las bibliotecas de extensión, los archivos de inclusión y las bibliotecas se encuentren correctamente en *C:\Program Files (x86)\Microsoft GDK\edition\GRDK* al compilar el juego. Para obtener detalles específicos sobre las propiedades y los destinos de msbuild definidos por la plataforma Gaming.Desktop.x64, consulta [Configuración de proyectos sin instalar el Microsoft Game Development Kit](/build/console-features/build-without-install/project-configuration-withoutinstall).

## Uso de la plataforma x64 con el Microsoft Game Development Kit (GDK)

Cuando el destino es PC sin usar la plataforma personalizada Gaming.Desktop.x64 de MSBuild, los archivos de proyecto deben implementar toda la funcionalidad necesaria.

* Para admitir la instalación "en paralelo", el proyecto tiene que seleccionar la edición adecuada. Esto puede lograrse mediante una propiedad establecida en la sección *Globals*:

```xml theme={null}
<PropertyGroup Label="Globals">
...
  <GDKPCEditionPath>$(GRDKLatest)</GDKPCEditionPath>
</PropertyGroup>
```

El uso de la variable de entorno `GRDKLatest` toma de forma predeterminada la edición más reciente instalada en el PC de desarrollo y tiene la forma **C:\Program Files (x86)\Microsoft GDK\<edition>\GRDK\\**.

> Usamos la propiedad **GDKPCEditionPath** en el resto de la configuración de compilación. No se recomienda el uso directo de `GRDKLatest` como propiedad en el resto del archivo de proyecto, ya que dificulta probar versiones nuevas, administrar actualizaciones, reproducir problemas, etc. Si usas archivos .props personalizados para dirigir tu proceso de compilación, coloca `GDKPCEditionPath` ahí en lugar de en cada archivo de proyecto. Ten en cuenta también que esta propiedad necesita una barra diagonal final para cumplir las convenciones de MSBuild.

Para VS 2019, también debes asegurarte de usar la versión nativa x64 de las herramientas. Para VS 2022, este es el valor predeterminado, por lo que es opcional.

```xml theme={null}
<PropertyGroup Label="Globals">
...
  <PreferredToolArchitecture>x64</PreferredToolArchitecture>
</PropertyGroup>
```

* Cualquier biblioteca de extensión del Microsoft Game Development Kit (GDK) necesaria debe tener las rutas de acceso include/lib adecuadas y las DLL redistribuibles incluidas según sea necesario. Esto puede lograrse modificando las importaciones *ExtensionSettings* del archivo vcxproj:

**Microsoft GDK (octubre de 2024) o posterior:**

```xml theme={null}
<ImportGroup Label="ExtensionSettings">
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.Services.API.C\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.XCurl.API\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.LibHttpClient\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.Game.Chat.2.Cpp.API\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.Multiplayer.Cpp\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.Party.Cpp\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.PartyXboxLive.Cpp\ExtensionLibrary.props" />
</ImportGroup>
```

**Microsoft GDK (junio de 2024) o anterior:**

```xml theme={null}
<ImportGroup Label="ExtensionSettings">
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.XCurl.API\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.LibHttpClient\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\Xbox.Game.Chat.2.Cpp.API\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.Multiplayer.Cpp\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.Party.Cpp\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
    <Import Project="$(GDKPCEditionPath)ExtensionLibraries\PlayFab.PartyXboxLive.Cpp\DesignTime\CommonConfiguration\Neutral\ExtensionLibrary.props" />
</ImportGroup>
```

* Las propiedades de VC++ Directories **ExecutablePath**, **IncludePath** y **LibraryPath** deben actualizarse para incluir las rutas de acceso del Microsoft Game Development Kit (GDK).

```xml theme={null}
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
  <ExecutablePath>$(GameDK)bin;$(ExecutablePath)</ExecutablePath>
  <IncludePath>$(GDKPCEditionPath)GameKit\Include;$(Console_SdkIncludeRoot);$(IncludePath);</IncludePath>
  <LibraryPath>$(GDKPCEditionPath)GameKit\lib\amd64;$(Console_SdkLibPath);$(LibraryPath)</LibraryPath>
</PropertyGroup>
```

```xml theme={null}
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
  <ExecutablePath>$(GameDK)bin;$(ExecutablePath)</ExecutablePath>
  <IncludePath>$(GDKPCEditionPath)GameKit\Include;$(Console_SdkIncludeRoot);$(IncludePath);</IncludePath>
  <LibraryPath>$(GDKPCEditionPath)GameKit\lib\amd64;$(Console_SdkLibPath);$(LibraryPath)</LibraryPath>
</PropertyGroup>
```

Para la ruta de acceso del ejecutable usamos directamente la variable de entorno `GameDK`, ya que esta no es "en paralelo". Esto también puede invalidarse como propiedad en un archivo .props personalizado si es necesario.

Las propiedades **Console\_SdkIncludeRoot** y **Console\_SdkLibPath** las proporciona el archivo *ExtensionLibrary.props* del Microsoft Game Development Kit (GDK), que es compatible tanto con PC x64 como con XBOX.

* Para los *ItemDefinitionGroups* de tu plataforma, asegúrate de agregar `_GAMING_DESKTOP` a las definiciones del preprocesador para mantener la coherencia con Gaming.Desktop.x64 al usar bibliotecas u otro middleware.

```xml theme={null}
 <PreprocessorDefinitions>_GAMING_DESKTOP;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
```

```xml theme={null}
<PreprocessorDefinitions>_GAMING_DESKTOP;WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
```

* También en los *ItemDefinitionGroups*, agrega las siguientes bibliotecas a tus dependencias de biblioteca adicionales. En concreto, `xgameruntime.lib` para GameRuntime y `gameinput.lib` para GameInput en PC.

```xml theme={null}
<AdditionalDependencies>xgameruntime.lib;gameinput.lib;d3d12.lib;dxgi.lib;dxguid.lib;uuid.lib;kernel32.lib;user32.lib;%(AdditionalDependencies)</AdditionalDependencies>
```

* El último elemento necesario es convertir el archivo de origen **MicrosoftGameConfig.mgc** al archivo **MicrosoftGame.config** requerido en la salida de compilación. Esto puede implementarse como una personalización de compilación:

```xml theme={null}
<CustomBuild Include="MicrosoftGameConfig.mgc">
  <Command>copy %(Identity) "$(OutDir)MicrosoftGame.config"
makepkg.exe localize /d "$(OutDir)" /pd "$(OutDir)" /gc "%(Identity)"</Command>
  <Message>MGC Compile</Message>
  <Outputs>$(OutDir)MicrosoftGame.config</Outputs>
</CustomBuild>
```

El archivo **MicrosoftGame.config** también necesitará los recursos de logotipo requeridos para ser válido, lo que puede lograrse con una copia de archivos:

```xml theme={null}
<ItemGroup>
  <CopyFileToFolders Include="GraphicsLogo.png" />
  <CopyFileToFolders Include="LargeLogo.png" />
  <CopyFileToFolders Include="SmallLogo.png" />
  <CopyFileToFolders Include="SplashScreen.png" />
  <CopyFileToFolders Include="StoreLogo.png" />
</ItemGroup>
```

> Crea un proyecto a partir de la plantilla *Direct3D 12 Desktop Game (Classic)* y revísalo para comprobar la configuración anterior, así como algunas recomendaciones adicionales.

## Consulte también

[Visual Studio (para el desarrollo de juegos de PC)](/tools/tools-pc/visualstudio/gr-visualstudio-toc)


## Related topics

- [Plantillas de proyecto en Visual Studio para el desarrollo en XBOX](/es/tools/tools-console/visualstudio/durango-visual-studio-templates.md)
- [Inicio de un nuevo título para PC con las plantillas de proyecto del GDK](/es/build/gdk-and-engines/guides/gdk-project-templates.md)
- [Propiedades de Visual Studio para el desarrollo de juegos de PC](/es/tools/tools-pc/visualstudio/gr-vs-property-pages.md)
- [Depuración de proyectos de PC en dispositivos Windows remotos en Visual Studio](/es/tools/tools-pc/visualstudio/gr-vs-debugging-with-visualstudio-remote-windows.md)
- [Propiedades de Visual Studio para el desarrollo en XBOX](/es/tools/tools-console/visualstudio/durango-property-pages.md)
