Skip to main content
Steamworks y el XBOX Game Development Kit (GDK) tienen varias diferencias en su estructura, en los patrones de sus API y en su propósito. Se describen en este tema.

No hay un singleton de API en el XBOX Game Development Kit (GDK)

Steamworks sigue un patrón en el que cada conjunto de características de la API se define como una interfaz (por ejemplo, todas las funciones de estadísticas de usuario están en la interfaz ISteamUserStats y el almacenamiento remoto está en ISteamRemoteStorage), cuyas instancias están disponibles en cuanto el juego inicializa la API en el código. El singleton de la API de Steamworks que se inicializa al comienzo del juego proporciona estas funciones y realiza un seguimiento del estado durante toda la vida útil de la aplicación. Este no es el caso de las API del XBOX Game Development Kit (GDK), que favorecen una API de C en la que gran parte del contexto y del estado actual de los datos de la API debe mantenerlos el propio juego y pasarlos a las distintas funciones de la API. Por ejemplo, después de autenticar a un usuario con los servicios de XBOX, el juego debe conservar el identificador (handle) del contexto de los servicios de XBOX y un identificador de usuario. Las API que se usan para obtener esta información no la “recuerdan” durante toda la vida útil de sus juegos como lo hace Steamworks. Por lo tanto, debe agregar variables miembro a la clase de su juego o llevar de otra forma el control de estos identificadores en su juego.

Funciones asincrónicas y devoluciones de llamada

Las funciones asincrónicas de Steamworks desencadenan eventos a los que puede suscribirse con la macro STEAM_CALLBACK o con una variable CCallResult. Cuando se desencadena un evento correspondiente al tipo de estructura de evento especificado, se llama al método especificado y se le proporciona una estructura de evento como único argumento. Esta estructura contiene el resultado devuelto por la API, así como información contextual disponible previamente que podría necesitarse para procesar los resultados de la llamada. Por ejemplo, al llamar a ISteamUserStats::DownloadLeaderboardEntries, necesita un identificador SteamLeaderboard_t en la función de devolución de llamada para pasarlo a ISteamUserStats::DownloadLeaderboardEntries, que puede obtener como miembro de la estructura LeaderboardScoresDownloaded_t que se pasa como parámetro al método de devolución de llamada que definió. En el XBOX Game Development Kit (GDK), todas las acciones asincrónicas siguen un patrón diferente: se crea una estructura XAsyncBlock, se le asigna opcionalmente una cola de tareas y, a continuación, se llama al método asincrónico de la API. Una vez completada esa llamada a la API, se dispara la función de devolución de llamada definida como miembro de XAsyncBlock y se proporciona un puntero al bloque asincrónico como único argumento. Si necesita acceder a información dentro de la función de devolución de llamada, puede usar el miembro de puntero de contexto del bloque asincrónico para hacerlo. A diferencia de Steam, la información de esta estructura de contexto no se proporciona automáticamente: debe crearla usted mismo. Siguiendo con nuestro ejemplo anterior, si necesitara acceso a un conjunto de datos en su función de devolución de llamada, podría hacer lo siguiente, como se muestra en este ejemplo de código.
El ejemplo anterior también incluye un puntero a this mediante shared_from_this() para que la función de devolución de llamada tenga la capacidad de llamar a métodos de instancia o acceder a variables miembro si es necesario. Tenga mucho cuidado al pasar punteros sin procesar debido a problemas de tiempo de vida. Tenga en cuenta también que, si solo necesita acceso a una variable en su devolución de llamada, puede simplemente establecer el valor del puntero context de su bloque asincrónico como un puntero a ese valor y, a continuación, convertirlo al tipo de ese valor en su devolución de llamada, en lugar de tener que definir una estructura.
Steamworks también requiere que el código del juego dispare las devoluciones de llamada a intervalos regulares mediante la función SteamAPI_RunCallbacks. Esto no es necesario en el XBOX Game Development Kit (GDK). Las devoluciones de llamada se desencadenan después de que se complete la tarea asincrónica distribuida por su cola de tareas si se usa una cola de tareas de grupo de subprocesos, que es la opción predeterminada. Para tener más control, puede distribuir la tarea asincrónica manualmente a un subproceso específico llamando a XTaskQueueDispatch cuando use una cola de tareas manual. Esto es más complejo, y los detalles sobre cómo se hace están fuera del alcance de esta guía. Para obtener más información sobre cómo el XBOX Game Development Kit (GDK) administra las operaciones asincrónicas de la API, incluido un ejemplo de código, consulte Modelo de programación asincrónica.

Origen de verdad para las API administradas por el título

Con Steamworks, la API es la única fuente de verdad para prácticamente todos los valores que pasan por ella. Las estadísticas de usuario se recuperan de la API y se calculan a partir de los valores de ISteamUserStats::GetStat/ISteamUserStats::SetStat, por ejemplo, y no está obligado a almacenar estos valores usted mismo en otro lugar. Las API de logros y de estadísticas/tablas de clasificación del XBOX Game Development Kit (GDK) tienen ambas la opción de estar administradas por el título para los desarrolladores que quieran más flexibilidad y sencillez en las llamadas que deben realizar. Los valores de las API administradas por el título son, como su nombre indica, administrados por su título. La única fuente de verdad para estos valores es su juego, que puede almacenar los valores en cualquier lugar; por ejemplo, en un archivo de guardado, en almacenamiento en la nube o en un servidor back-end de terceros. El valor almacenado en los servidores de la red de XBOX (también conocida como XBOX Live) puede usarse como una instantánea que se actualiza ocasionalmente, pero no debe ser su única fuente de verdad en tiempo de ejecución. Una opción alternativa a las estadísticas y los logros administrados por el título son las estadísticas y los logros basados en eventos. Estos usan eventos de telemetría para actualizar el progreso de los logros de un usuario o recalcular sus estadísticas, y consideran los servicios de XBOX como su fuente de verdad. Puede elegir qué API desea usar para las estadísticas y los logros en la página Gameplay Setting de su juego en el Centro de partners. Para obtener más información sobre esto, consulte las descripciones de los temas que comparan Estadísticas basadas en eventos frente a estadísticas administradas por el título y Logros basados en eventos frente a logros administrados por el título. En ocasiones, puede ver estas API mencionadas por sus nombres anteriores: Estadísticas/Logros 2013 (basados en eventos) y Estadísticas/Logros 2017 (administrados por el título).

El XBOX Game Development Kit (GDK) es multiplataforma

Los juegos que usan las API de Steamworks pueden asumir que siempre se inician a través de Steam y, por lo tanto, la API puede inyectar cierto contexto en la inicialización sobre quién está jugando. Los juegos que usan el XBOX Game Development Kit (GDK) pueden ser juegos que se ejecutan en una consola XBOX, en un PC mediante la aplicación XBOX Gaming, o en cualquier cantidad de dispositivos y lanzadores. Por lo tanto, parte del contexto que está disponible automáticamente con Steam podría necesitar inicializarse manualmente con el XBOX Game Development Kit (GDK), como la identidad del usuario. Para obtener acceso a esta información, puede seguir los pasos del tema Inicialización del GDK de esta guía, que proporciona instrucciones para autenticar a un usuario con su cuenta Microsoft/gamertag. Esto también significa que hay algunos paradigmas en las funciones del XBOX Game Development Kit (GDK) diseñados para escenarios de consola, como la compatibilidad con el inicio de sesión de varios usuarios de las API XUser, que no tienen un análogo en el PC.

Empaquetado

La mayoría de los juegos en Steam pueden usar las funciones de la API de Steamworks simplemente configurando la información del juego en el portal de administración de Steamworks, descargando el SDK, importando los archivos necesarios e inicializando la API en el código. Después de realizar estos pasos, su juego se integra con la API de Steamworks desde cualquier lugar en el que se inicie, como el editor de un motor de juego. Para que las API del XBOX Game Development Kit (GDK) funcionen, su juego debe empaquetarse primero. Para empaquetar correctamente su juego, debe editar el archivo MicrosoftGame.config de su juego y usar la herramienta MakePkg del XBOX Game Development Kit (GDK) para crear el paquete MSIXVC de su juego, que después puede cargar de forma independiente (sideload) como una aplicación de Microsoft Store en un PC que tenga habilitado el modo de desarrollador. Esto también significa que, a diferencia de los juegos de Steamworks, parte de la funcionalidad del XBOX Game Development Kit (GDK) no funciona en el editor de un motor de juego u otros entornos de desarrollo sin empaquetar primero el juego. Para obtener más información sobre el empaquetado, consulte los siguientes recursos.

Desarrollo y prueba de juegos de Unity

Los juegos creados con el motor de juego Unity pueden usar el GDK Unity Plug-in para desarrollar sus títulos. Este complemento se incluye en la oferta del XBOX Game Development Kit (GDK) y como complemento independiente en el portal de descargas para desarrolladores de XBOX. Este complemento incluye contenedores (wrappers) de API que le permiten llamar a las funciones del XBOX Game Development Kit (GDK) desde el código C# de su juego. Para obtener más información sobre el GDK Unity Plug-in, consulte Introducción a Unity para el desarrollo en PC.
Última modificación el 28 de agosto de 2026