ISteamRemoteStorage, que escriben los archivos en la carpeta de almacenamiento del juego en el disco duro local y los sincronizan con la nube. Como alternativa, puede realizar todas sus lecturas y escrituras directamente en el sistema de archivos del equipo y, a continuación, usar Steam Auto-Cloud para sincronizar con la nube la carpeta local que contiene los datos del juego.
Microsoft Game Development Kit (GDK) admite ambos enfoques:
- Para los guardados en la nube basados en código, el GDK ofrece un contenedor simplificado de la API
XGameSave, más compleja, que proporciona una funcionalidad similar a la de los métodos deISteamRemoteStorage. - Para un enfoque similar a Steam Auto-Cloud, el GDK admite la portabilidad de títulos anteriores a los guardados de juego de PC con guardados en la nube sin código, que sincroniza con la nube una carpeta local designada sin requerir cambios en el código de E/S de archivos.
La API completa de
XGameSave, sin contenedor, ofrece más funcionalidad y flexibilidad que el contenedor simple. Si necesita alguna de esas funcionalidades, no use el contenedor. Los juegos no deben alternar entre los dos ni mezclar llamadas de ambas API. Para obtener más información sobre la API XGameSave, consulte Guardados de juego.Comparación de operaciones de archivos
Los siguientes ejemplos de código muestran cómo realizar operaciones básicas de archivos en la API Remote Storage de Steamworks y su equivalente en el GDK. Asumen que la variableprovider contiene un puntero a un objeto Microsoft::Xbox::Wrappers::GameSave::Provider inicializado.
Si no usa la API Remote Storage de Steam y en su lugar optó por usar Steam Auto-Cloud, reemplace las llamadas a la API Remote Storage por sus equivalentes de la API del sistema de archivos.
Lectura de un archivo
Steamworks
GDK
Documentación de referencia
Microsoft.Xbox.Wrappers.XGameSave.Provider.LoadEscritura de un archivo
Steamworks
GDK
Documentación de referencia
Microsoft.Xbox.Wrappers.XGameSave.Provider.SaveEliminación de un archivo
En Steam, puede eliminar un archivo de la nube pero conservar la copia local (FileForget), o eliminar un archivo de ambas ubicaciones (FileDelete). La API del contenedor de XGameSave no tiene un equivalente de FileForget. Su función Delete funciona como FileDelete en Steamworks.
Steamworks
GDK
Documentación de referencia
- Microsoft.Xbox.Wrappers.XGameSave.Provider.Delete(std::string)
- Microsoft.Xbox.Wrappers.XGameSave.Provider.Delete(std::string, std::string)
- Microsoft.Xbox.Wrappers.XGameSave.Provider.Delete(std::string, BlobNames)
Obtención de todos los archivos
Steamworks
GDK
Documentación de referencia
- Microsoft.Xbox.Wrappers.XGameSave.Provider.QueryContainers
- Microsoft.Xbox.Wrappers.XGameSave.Provider.QueryContainerBlobs
Comprobación del espacio disponible
En los ejemplos siguientes,totalBytes es la cantidad de espacio que se asigna a su juego en el proveedor de almacenamiento en la nube. availableBytes es la cantidad de espacio libre restante (es decir, availableBytes = totalBytes – bytesUsed).
Steamworks
GDK
Documentación de referencia
Microsoft.Xbox.Wrappers.XGameSave.Provider.GetQuotaDiferencias de terminología
En Steam, los datos del almacenamiento remoto se administran como archivos, que funcionan como los archivos de un disco duro local. Para leer o escribir, especifique el archivo y, a continuación, obtenga o establezca los bytes que contiene. En Microsoft Game Development Kit (GDK), el equivalente de los archivos de Steam son los blobs. Los blobs se agrupan en una estructura llamada contenedor. Un contenedor es un grupo de blobs con nombre. Por ejemplo, puede usar contenedores para admitir varias ranuras de guardado por usuario, con los mismos nombres de archivo en cada ranura. Si no necesita la capa organizativa adicional que proporcionan los contenedores, coloque todos sus blobs (archivos) en el mismo contenedor.Los nombres de contenedor no pueden incluir espacios. Intentar acceder a un nombre de contenedor que incluya un espacio, o crearlo, hace que el método del proveedor devuelva un HRESULT de
0x80830001: el volumen especificado no admite niveles de almacenamiento.Límites de almacenamiento
Microsoft Game Development Kit (GDK) tiene un tamaño máximo de escritura de blob o archivo y un límite de almacenamiento general inferiores a los de Steam. En Steam, cada operación de escritura de archivo está limitada a 100 mebibytes (MiB), y cada archivo no puede superar los 200 MiB. En cambio, la APIXGameSave y su contenedor limitan cada blob a 16 MB y permiten un máximo de 256 MB por usuario y juego.
Si necesita almacenar más de 16 MB de datos en un blob, divida los datos en varios blobs. A continuación, implemente una función de lectura y escritura secuencial para procesar los datos blob a blob.
Las funciones del contenedor son bloqueantes
La interfazISteamRemoteStorage ofrece dos versiones de las funciones de lectura y escritura: FileRead y FileWrite, además de FileReadAsync y FileWriteAsync. Las versiones Async devuelven la llamada cuando el archivo se ha leído o escrito. Las funciones simplificadas del contenedor de XGameSave no ofrecen versiones asincrónicas de sus equivalentes de FileRead y FileWrite. Provider::Load y Provider::Save son ambas bloqueantes, así que tenga en cuenta este comportamiento cuando las use en su juego.
Por este motivo, Provider::Initialize produce una excepción si la llama desde el subproceso de la interfaz de usuario.
Inicialización
Incluya el archivo de encabezado del contenedor en la solución de su juego antes de usar cualquier método del contenedor. Puede encontrarlo en %GRDKLatest%\GameKit\Include\xgamesavewrappers.hpp. Antes de usar los métodos del contenedor deXGameSave, cree una instancia de la clase Provider y llame al método Provider::Initialize. Conserve un puntero a la instancia de Provider durante toda la vida útil de su juego. Llame a Provider::Initialize desde un subproceso distinto del subproceso de la interfaz de usuario. El método produce una excepción si lo llama desde el subproceso de la interfaz de usuario. Para inicializar el proveedor del contenedor, necesita un XUserHandle del usuario actual y el identificador de configuración de servicio (SCID) de su juego.
