Skip to main content
En el XBOX Game Development Kit (GDK) y en Steam, los logros tienen información como el nombre, la descripción, el icono y si se ha desbloqueado para el usuario actual y, opcionalmente, el progreso hacia su consecución. Steam también tiene una API de estadísticas que los juegos usan para comparar el progreso de un usuario con algún objetivo predeterminado y desbloquear logros cuando se superan estos objetivos. De hecho, el XBOX Game Development Kit (GDK) tiene en realidad dos API de logros: basada en eventos (anteriormente llamada Logros 2013) y administrada por el título (anteriormente llamada Logros 2017). Aunque ambos sistemas son opciones viables, los logros y las estadísticas administrados por el título le resultarán mucho más familiares si viene de Steam y coincidirán con la lógica existente que probablemente ya esté presente en su juego. Por este motivo, describiremos esa API en este tema. Para obtener más información sobre las diferencias entre las dos API, consulte Logros basados en eventos frente a logros administrados por el título. Las secciones siguientes describen las diferencias entre los logros en la API de Steamworks y el XBOX Game Development Kit (GDK). Para usar las API de logros administrados por el título, debe crear un identificador de contexto de servicios de XBOX. Esto puede hacerse mediante la función XblContextCreateHandle y un XUserHandle de la API XUserAddResult (del tema Autenticación y propiedad del usuario).

Seguimiento del progreso de los logros

En la API de Steam, puede usar la API ISteamUserStats::GetStat/ISteamUser::SetStat para realizar un seguimiento del progreso de un usuario hacia un logro, lo que hace que los valores almacenados en la API de estadísticas de Steam sean la fuente de verdad del valor de progreso actual. Con los logros administrados por el título, su juego es la única fuente de verdad y debe realizar el seguimiento del progreso actual del usuario por su cuenta. La actualización del progreso actual en la nube con una llamada a la API se realiza como una especie de “registro” (check in) y se usa para mostrar el progreso de un usuario en algunas superficies del ecosistema de XBOX. No hay una guía específica sobre dónde debe residir el valor de progreso actual, pero muchos juegos eligen almacenarlo en su archivo de guardado (y en la nube), mientras que otros podrían almacenarlo en su propio servicio back-end. Asegúrese de mantener sincronizados entre sí los valores de la nube y los del sistema interno de administración de estadísticas de su juego.

Enumeración de todos los logros

Para obtener todas las estadísticas de un usuario con la API de Steamworks, normalmente llamaría a ISteamUserStats::RequestUserStats para extraer las estadísticas más recientes del servidor. Una vez disparada la devolución de llamada correspondiente, podría iterar por cada logro mediante su nombre de API usando las funciones ISteamUserStats::GetStat/ISteamUserStats::GetAchievement e inicializando el estado del juego con los datos que devolvieran. Con el XBOX Game Development Kit (GDK), puede usar simplemente la función XblAchievementsGetAchievementsForTitleIdAsync y, a continuación, usar los datos de cada objeto de logro de la matriz proporcionada como parámetro de salida (Out) de XblAchievementsResultGetAchievements para inicializar el estado de su juego. Cada logro se proporciona como una estructura XblAchievement. Para obtener más información sobre los datos que contiene, consulte su tema de referencia.

Steamworks

XBOX Game Development Kit (GDK)

Para obtener más información sobre los logros administrados por el título, consulte Obtención de logros administrados por el título.

Actualización del progreso de un logro y desbloqueo de logros

En el XBOX Game Development Kit (GDK) y en Steam, el código del juego determina cuándo debe desbloquearse un logro. Con el XBOX Game Development Kit (GDK), establecer un logro con un progreso de 100 lo desbloquea. Las secciones siguientes describen los pasos necesarios para actualizar el progreso de un usuario en un logro especificado con ambas API. A continuación se muestra un ejemplo de código de un método UpdateAchievement, implementado en ambos SDK, que recibe un identificador/nombre de API del logro (y el nombre de API de la estadística en Steam), cuánto incrementar el logro y cuál es el valor objetivo para desbloquear ese logro, y actualiza el progreso y desbloquea el estado del logro en consecuencia.

Steamworks

XBOX Game Development Kit (GDK)

Para obtener más información sobre los logros administrados por el título, consulte Actualización de logros administrados por el título.

Logros sin conexión

Desbloquear un logro de XBOX no requiere una conexión de red. Se desbloquea automáticamente con el servidor más adelante, sin código adicional, si el usuario no está conectado a la red de XBOX (también conocida como XBOX Live).

Obtención de los logros de otro usuario

Para obtener los logros de otro usuario, puede llamar simplemente a las funciones XblAchievementsGetAchievementsForTitleAsync/XblAchievementsGetAchievementAsync con el identificador de usuario de XBOX (XUID) del usuario cuyos logros quiere recuperar. Esto es similar a usar las funciones ISteamUser::RequestUserStats, ISteamUserStats::GetUserStat e ISteamUserStats::GetUserAchievement en Steam.

Restablecimiento de logros

A diferencia de ISteamUserStats::ResetAllStats de la API de Steamworks, que puede usarse para restablecer el progreso del usuario en todas sus estadísticas y, si se especifica, en sus logros, el XBOX Game Development Kit (GDK) no tiene ninguna capacidad documentada para restablecer mediante programación el progreso o el estado de desbloqueo de los logros. Intentar llamar a XblAchievementsUpdateAchievementAsync con un valor de progreso de 0 deja el valor de progreso sin cambios. Sin embargo, puede usar la herramienta Player Data Reset (XblPlayerDataReset.exe) durante las pruebas para lograrlo.

Límites de frecuencia

Al actualizar el progreso de los logros, tenga cuidado de no llamar a la API de servicios de XBOX (XSAPI) con demasiada frecuencia, porque puede hacer que su juego alcance su límite de frecuencia. Esto puede causar un comportamiento inesperado y una mala experiencia para sus usuarios. Para los logros que realizan un seguimiento de estadísticas que se actualizan con frecuencia, intente agrupar las llamadas a la API en lotes para que se disparen después de que se produzca un número determinado de eventos, o para que se actualicen en el servidor en un intervalo de tiempo determinado. Puede depurar sus llamadas a la API mediante el analizador de seguimiento de los servicios de XBOX (XblTraceAnalyzer.exe). Para obtener más información sobre los límites de frecuencia en los servicios de XBOX, consulte Limitación de frecuencia específica.
Última modificación el 28 de agosto de 2026