Создаю 2D-игру с использованием игровой библиотеки LibGDX. Когда игра начинается, некоторые переменные shoud заполняются значениями файла Preferences
(см.: https://github.com/libgdx/libgdx/wiki/Preferences).Android/LibGDX - Integer не может быть отлит для float (но он отлично работает для рабочего стола)
В моем классе GamePreferences
у меня есть массив (Vector3), называемый helpingRects
. В для петли, массив должен быть заполнен значениями файла 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
вектор, где х-значение можно найти в файл предпочтений в записи «assistrect0x» и т. д.
Поскольку я использую 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 не называются «helpingrect0.0x» и т.д.
Знает ли кто-решение для этой проблемы? Спасибо заранее
Почему вы не хотите, чтобы они были «Integer»? Ваша stacktrace предполагает, что значения являются типом 'Integer', почему вы используете' getFloat'? В любом случае вы можете использовать его с помощью '(float) Integernumber' –
Vector3 - это класс, для которого требуются значения' float'. И я не могу использовать 'i' для' float' из-за причины, о которой я упоминал выше. – erik4thewinners
@ erik4thewinners, как вы ставите ценность в предпочтении, покажите мне этот код? – Aryan