使用说明
uwp官方是建议通过xboxlive保存存档的,如果需要使用本地存档的接口,使用如下方法。
读取存档
*导入命名空间
using Windows.Foundation;
using Windows.Storage;
using Windows.System;
*读取存档接口
public void LoadData(string userId,System.Action<string> successHandle,System.Action<string> failHandle)
{
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
IAsyncOperation<StorageFile> saveFileAsync = storageFolder.GetFileAsync(GetSaveDataFileName(userId));
saveFileAsync.Completed = (IAsyncOperation<StorageFile> info, AsyncStatus status) =>
{
if (status == AsyncStatus.Completed)
{
StorageFile saveFile = info.GetResults();
IAsyncOperation<string> readAsync = FileIO.ReadTextAsync(saveFile);
readAsync.Completed = (IAsyncOperation<string> readInfo, AsyncStatus readStatus) =>
{
if (readStatus == AsyncStatus.Completed)
{
string data = readInfo.GetResults();
if (successHandle != null)
{
successHandle(data);
}
}
};
}
else
{
if (failHandle != null)
{
failHandle("");
}
}
};
}
保存存档
public void SaveData(string userId, string data, System.Action successHandle, System.Action<string> failHandle)
{
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
IAsyncOperation<StorageFile> saveFileAsync = storageFolder.CreateFileAsync(GetSaveDataFileName(userId),CreationCollisionOption.ReplaceExisting);
saveFileAsync.Completed = (IAsyncOperation<StorageFile> info, AsyncStatus status) =>
{
Debug.Log("SaveStatus:" + status.ToString());
if (status == AsyncStatus.Completed)
{
StorageFile saveFile = info.GetResults();
IAsyncAction writeAsync = FileIO.WriteTextAsync(saveFile, data);
writeAsync.Completed = (IAsyncAction writeInfo, AsyncStatus writeStatus) =>
{
if (writeStatus == AsyncStatus.Completed)
{
if (successHandle != null)
{
successHandle();
}
}
else
{
if (failHandle != null) failHandle("");
}
};
}
else
{
if (failHandle != null) failHandle("");
}
};
}
string GetSaveDataFileName(string userId)
{
return "LittleTriangle.sav";
//奇怪的是不能使用后面的文件命名
//if (string.IsNullOrEmpty(userId))
//{
//return "LittleTriangle.sav";
//}
//else {
// return userId + ".sav";
//}
}
遇到的问题:
原来每次编译会自动先把之前的应用卸载掉,之前的存档也就没了...
●存档路径位置?
C:\Users\用户名\AppData\Local\Packages\应用包名xxx\LocalState\LittleTriangle.sav
●存档名字规范?
这个是最让我困惑的,我命名成LittleTriangle_【userId】.sav,或者【userId】.sav(【userId】为获取的玩家id),提示我存档失败,也就是应该是userId有一些不符合规范的符号,所以不能存档。
●官方文档的写法提示报错?
官方文档的写法是通过wait等待,发现在项目中这样写会报错。猜测因为官方是XAML而我是D3D。