【问题标题】:Store a user's score in Windows 10 UWP app?在 Windows 10 UWP 应用中存储用户的分数?
【发布时间】:2016-09-02 16:50:31
【问题描述】:

我正在制作一款教育游戏(Windows 10 UWP,C# + XAML),我需要存储用户信息(特别是他们当前的分数)并在他们再次启动应用程序时检索它。我找到了一种方法来做到这一点(见下面的代码),但我不知道这是否是这个问题的正常解决方案。我目前正在创建一个 txt 文件并在其中存储和检索数据。有没有更常见或更简单的方法来做到这一点?

这是我目前正在做的事情:

创建文件:

StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile sampleFile = await storageFolder.CreateFileAsync("nameOfTextFile.txt", CreationCollisionOption.OpenIfExists); //other options are ReplaceExisting

打开文件:

StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile sampleFile = await storageFolder.GetFileAsync("nameOfTextFile.txt");

将文本写入文件:

  await FileIO.WriteTextAsync(sampleFile, "Put the added text here");

从文件中读取文本:

string someVariableName = await FileIO.ReadTextAsync(sampleFile);

-在此先感谢您的帮助!!

【问题讨论】:

  • 这是为您的 UWP 应用存储/读取应用数据的正确方法。如果您还没有,我建议您使用与上述相同的方式将您的设置存储在 XML 文件中
  • 谢谢,杰夫!我一直在使用 txt 文件,但这只是因为我不知道其他选项。您介意向我解释一下使用 XML 的一些优点吗?
  • 正如@CheckItOut 建议的那样,创建一个类,您可以在其中执行应用程序设置的getting 和setting,然后以这种方式读取/写入文件。如果您在每个属性上方设置 [XmlSerialize] 的属性,则可以使用 XmlSerializer 来编写您的 XML 文件。同样对于反向(从 XML 加载),如果您需要,我可以发布一个示例作为答案
  • 我很想看一个例子!感谢您的帮助,Geoff(和 CheckItOut)!
  • 没有问题!和我一起裸露,我会看看我能沙沙作响(除非@CheckItOut 可以更新他们的答案 - 如果是这样,我会投票)

标签: c# windows xaml win-universal-app


【解决方案1】:

虽然基于文件的方法有效,但还有更简单的方法,至少对于简单数据而言:您可以使用漫游(或本地)设置。例如,漫游设置在设备之间漫游,只要它们的大小不超过 64K,并且会将分数从用户的桌面传送到用户的手机。本地设置保留在机器上。

设置易于使用:

IPropertySet propertySet = ApplicationData.Current.RoamingSettings.Values;

// Get previous score (or 0 if none)
int score = (int)(propertySet["Score"] ?? 0);

// ...play game...

// Set updated score:
propertySet["Score"] = score;

【讨论】:

    【解决方案2】:

    我进行此类项目和设置的方式是在 Visual Studio 中创建属性设置,然后设置和获取设置/值。

    您可以通过转到应用程序属性来访问它。 这允许访问读取、写入和保存信息/onload restore 信息。

    一些信息链接: https://msdn.microsoft.com/en-us/library/bb397755(v=vs.110).aspx

    和(建议)

    https://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx

    【讨论】:

      【解决方案3】:

      好的,下面是一个使用类来存储您的设置的示例。

      有很多很多方法可以做到这一点。太多了,无法列出。

      创建一个设置类:

      public class YourSettingsClass
      {
          public string UserFirstName { get; set; }
          public string UserLastName { get; set; }
          public string UserScore { get; set; }
      }
      

      创建 AppSettings 帮助程序

      public AppSettings
      {
          private static YourSettingsClass _settings = new YourSettingsClass();
      
          public static string UserFirstName
          {
              get { return _settings.UserFirstName; }
              set { _settings.UserFirstName = value; }
          }
      
          public static string UserLastName
          {
              get { return _settings.UserLastName; }
              set { _settings.UserLastName = value; }
          }
      
          public static string UserScore
          {
              get { return _settings.UserScore; }
              set { _settings.UserScore = value; }
          }
      
          public static void SaveSettings()
          {
              // Now, use your "settingsfile.xml" (or whatever you're saving as)
              // to write your settings to from your _settings static field object.
      
              // I'll let you have a play as to how you want to do this...
          }
      
          public static void LoadSettings()
          {
              YourSettingsClass tempSettingsClass = new YourSettingsClass();
      
              // Now, use your "settingsfile.xml" (or whatever you've saved it as)
              // to load in your settings and assign to your tempSettingsClass variable.
      
              // I'll let you have a play as to how you want to do this...
      
              // Assign the settings from your loaded object.
              _settings = tempSettingsClass;
          }
      }
      

      现在,您可以从任何其他班级致电AppSettings.LoadSettings()。您可以在 App Startup 或按需执行此操作。

      加载设置后,只需将AppSettings.UserFirstName 或您想要的任何属性引用到get 值或set 值即可。

      准备好后,您可以通过AppSettings.SaveSettings() 将设置保存回磁盘上的 XML 文件。

      我故意省略了用于从存储中加载和保存的代码,以及用于 se/反序列化类对象的代码,因为我在这台 PC 上没有任何 UWP 组件,而且我已经从内存中完成了这一切,所以我没有不想放任何东西让你失望。

      此外,您还需要进行更多学习(甚至是试错)。

      最后

      在您的AppSettings 静态属性的getters 中,您还可以执行null 或string.IsNullOrWhiteSpace 检查有问题的_settings' 属性,如果是,则调用LoadSettings() 方法。

      这将使您不必在其他地方手动在代码中调用它。

      有用的链接

      XmlSerializer and how to use the Serialize method

      All about what you can do with the FileIO.WriteTextAsync

      不是一篇文章,而是一个类似的问题:UWP C# Read & Write XML File

      我真的希望这会有所帮助。

      祝你好运!

      【讨论】:

      • 这太棒了!非常感谢 Geoff 的示例和其他文章的链接!我个人不认识任何熟练的程序员,所以我非常感谢帮助!
      • 很高兴为您提供帮助 :) 如果您需要任何东西,请告诉我 - 如果您在您的情况下使用过此功能,请不要忘记标记为答案 :)
      猜你喜欢
      • 2023-04-09
      • 2016-01-28
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2016-02-29
      • 1970-01-01
      相关资源
      最近更新 更多