我使用游戏库LibGDX创建2D游戏。当游戏开始时,一些变量应该填充Preferences
文件的值(参见:https://github.com/libgdx/libgdx/wiki/Preferences)。
在我的GamePreferences
课程中,我有一个名为helpingRects
的数组(Vector3)。在for循环中,数组应填充prefs文件的值:
for(int i = 0; i < numOfHelpingRects; i++)
{
helpingRects.add(new Vector3(prefs.getFloat("helpingrect" + String.valueOf(i) + "x"), prefs.getFloat("helpingrect" + String.valueOf(i) + "y"), prefs.getFloat("helpingrect" + String.valueOf(i) + "l")));
}
因此,例如,对于i = 0
,将添加一个新的helpingRects
向量,其中x值可以在首选项文件的“helpsrect0x”等中找到。
由于我使用LibGDX,我可以在多个平台上运行游戏。在dekstop上,代码工作正常,但在Android上,我收到一条错误消息:
E/AndroidRuntime: FATAL EXCEPTION: GLThread 23941
Process: de.ej.facharbeitsspiel, PID: 13218
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Float
at android.app.SharedPreferencesImpl.getFloat(SharedPreferencesImpl.java:256)
at com.badlogic.gdx.backends.android.AndroidPreferences.getFloat(AndroidPreferences.java:101)
at de.ej.facharbeitsspiel.Tools.GamePreferences.load(GamePreferences.java:65)
at de.ej.facharbeitsspiel.MainClass.create(MainClass.java:26)
at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:275)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1633)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1354)
基本上,变量i
显然是int
,不能转换为浮点值。将i
从int
更改为float
没有任何帮助,因为在这种情况下,i
等于0.0/1.0
等等,但这样做很糟糕,因为我的条目在。{ prefs不称为“helpsrect0.0x”等。
有人知道这个问题的解决方案吗?提前谢谢
答案 0 :(得分:0)
首先,如果您使用float i = 0
String.format("%.0f", i)
其次,查看代码时,我发现很难相信错误是因为i
是int
。
只是为了进行测试,尝试对一行进行硬编码,看看是否有效:
helpingRects.add(
new Vector3(prefs.getFloat("helpingrect0x"),
prefs.getFloat("helpingrect0y"),
prefs.getFloat("helpingrect0l")));
我的猜测是上述情况不起作用,这表明该问题不是i
为int
。
编辑: 以上内容可以扩展如下:
float x = prefs.getFloat("helpingrect0x");
float y = prefs.getFloat("helpingrect0y");
float l = prefs.getFloat("helpingrect0l");
helpingRects.add(new Vector3(x, y, l));
这将进一步帮助解决问题。
答案 1 :(得分:0)
用户Tenfour04在这里有正确的想法。 Android的首选项文档显示,如果您的值不存在,它将使用您提供的默认值,但如果该值已经存在,则将返回该值。最近,当我将一个首选项值从整数更新为浮点数时,这发生在我身上,因为该值已经以整数格式存在于首选项中。通常,您要做的就是清除您的应用程序数据(或卸载您的应用程序)以清除这些首选项,然后它将不会检索此旧值。有时在更新的Android设备上并非如此。如果Android设备运行的是棉花糖或更高版本,则可能必须更改清单中的allowBackup="false"
。如果将其设置为true,则卸载应用程序或清除数据不会清除首选项。