【问题标题】:Saving texture with Preferences使用首选项保存纹理
【发布时间】:2015-05-03 10:24:07
【问题描述】:

所以我想要实现的是:当用户购买新项目(纹理)时,他们可以单击一个按钮将旧项目(纹理)替换为新项目。 我首先想到的是Objectmaps。所以我创建了这个:

ObjectMap<Integer, Texture> screenMap = new ObjectMap<Integer, Texture>();

我现在只使用两个项目只是为了掌握它:

screenMap.put(prefs.getInteger("stoneOne", 0), sdStone);

screenMap.put(prefs.getInteger("stoneTwo", 1), stone_3);

这是我用来改变纹理的方法:

public void setStone1() {
    stoneImage = new Image(screenMap.get(0));

}

public void setStone(int screenId) {
    stoneImage = new Image(screenMap.get(screenId));

  }

现在到我能弄清楚的部分:

Preferences prefs = Gdx.app.getPreferences("preferences");
                    prefs.putString("textField", textField.getText());
                    prefs.putString("textArea", textArea.getText());
                    prefs.getInteger("stone", );
                    prefs.putInteger("stone", );
                    prefs.flush(); 

我不知道要放什么整数,正如你所看到的,我什至现在把它遗漏了。我尝试了 screenId 整数,但由于它处于无效状态,因此无法访问? P.S 别介意我得到的奇怪名字。我从一个旧项目中获取了一些代码。

【问题讨论】:

    标签: android libgdx android-preferences object-object-mapping


    【解决方案1】:

    尝试另辟蹊径。

    1. Save Texture to sdcard
    2. 将文件路径保存到首选项中。

    Preferences prefs = Gdx.app.getPreferences("preferences");
                            prefs.putString("texture_one_path", "/sdcard/tex1.jpeg");
                            prefs.putString("texture_two_path", "/sdcard/tex2.jpeg");
    

    【讨论】:

      【解决方案2】:

      谢尔盖是对的。纹理又重又大,你可能有很多。这适用于 SD 卡。

      首选项是在移动设备上使用的轻量级、安全的配置文件。它们通常也被加密,因此访问它们总是有成本的。它们通常用于用户设置、登录信息等。Android 对 Preferences 的外推称为 SharedPreferences。这是文档:http://developer.android.com/reference/android/content/SharedPreferences.html

      “SharedPreferences”的 iOS 概念称为 NSUserDefaults,这是它​​的页面:https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html

      底线:您不应该在首选项中保存太多信息。将其用于字符串、全局值、用户设置(音量级别、用户凭据、关闭 gore 等)。对于大型字符串数据,请使用 raws。对于大型媒体,请使用 SD 卡。

      希望对您有所帮助。

      【讨论】:

      • 信息量很大。谢谢你。如果我理解正确,我应该使用首选项将纹理保存到 SD 卡吗?正如谢尔盖所​​说。问题是,我看不到 Sergey 发布的代码将如何解决我的问题。是的,纹理正在保存到 sdCard 中。但是,例如,我应该写什么而不是“texture_one_path”?只是我的 textFields 名称?这段代码如何确保当用户重新启动应用时,绘制的是正确的纹理?
      • 首选项有两个参数:键和值。它本质上是一个哈希映射/字典。您想为 X 纹理创建一个通用键,然后将生成的特定于设备的本地路径保存为值。用户可能有不同的文件路径、SD 卡(甚至多张卡)等,因此拥有不同的路径很有用。如果键值对不存在,您也应该尝试自己尝试,制作它们。对于已更改/格式化其卡或将文件从您预期的位置移动的用户来说,这是一种安全方案。
      • 哇,谢谢,终于有人教了。所以我存储了一个作为 X 纹理参考的键。然后我如何使用该键来确保绘制与该键关联的纹理我不确定?用try-catch?你可能有这方面的例子吗?这对我来说是一个新领域。
      • 假设您想要草纹理的文件路径。您转到您的偏好并请求 GRASS_TEXTURE_KEY 的值。如果该键没有值,则需要制作纹理。完成所有工作以找出 SD 卡路径,制作纹理,将其保存到该路径,并将文件路径值放入 GRASS_TEXTURE_KEY 的首选项中。如果 pref 键存在,则从路径加载纹理(因为它已经制作好了)。 try-catch 只是为了确保纹理确实存在、没有被擦除、SD 卡没有被更换等。
      猜你喜欢
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多