当前位置: 代码迷 >> Android >> Android / LibGDX-不能将Integer强制转换为浮点数(但对于桌面系统来说效果很好)
  详细解决方案

Android / LibGDX-不能将Integer强制转换为浮点数(但对于桌面系统来说效果很好)

热度:118   发布时间:2023-08-04 11:46:35.0

我使用游戏库LibGDX创建2D游戏。 游戏开始时,应使用“ Preferences文件的值填充一些变量(请参阅: : )。

在我的GamePreferences类中,我有一个名为helpingRects的Array(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向量,可以在首选项文件中的“ helpingrect0x”等位置找到x值。

由于使用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 ,不能转换为浮点值。 iint更改为float并没有帮助,因为在这种情况下, i等于0.0/1.0等。但这很糟糕,因为我在.prefs中的条目未称为“ helpingrect0.0x”等。

有人知道这个问题的解决方案吗? 先感谢您

首先,如果使用String.format("%.0f", i)则可以使用float i = 0

其次,查看您的代码,我很难相信该错误是因为iint

仅出于测试目的,请尝试对一行进行硬编码以查看是否可行:

helpingRects.add(
    new Vector3(prefs.getFloat("helpingrect0x"), 
    prefs.getFloat("helpingrect0y"), 
    prefs.getFloat("helpingrect0l")));

我的猜测是上述方法不起作用,这将表明问题不是iint

编辑:以上可以扩展,如下所示:

float x = prefs.getFloat("helpingrect0x");
float y = prefs.getFloat("helpingrect0y");
float l = prefs.getFloat("helpingrect0l");
helpingRects.add(new Vector3(x, y, l));

这将进一步有助于解决该问题。

用户Tenfour04在这里有正确的想法。 Android的首选项文档显示,如果您的值不存在,它将使用您提供的默认值,但如果该值已经存在,则将返回该值。 最近,当我将一个首选项值从整数更新为浮点数时,这发生在我身上,因为该值已经以整数格式存在于首选项中。 通常,您要做的就是清除您的应用程序数据(或卸载您的应用程序)以清除这些首选项,然后它将不会检索此旧值。 有时在更新的Android设备上并非如此。 如果Android设备运行的是棉花糖或更高版本,则可能必须在清单中更改allowBackup="false" 如果将其设置为true,则卸载应用程序或清除数据不会清除首选项。

  相关解决方案