2017-02-15 17 views
0

Создаю 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» и т.д.

Знает ли кто-решение для этой проблемы? Спасибо заранее

+0

Почему вы не хотите, чтобы они были «Integer»? Ваша stacktrace предполагает, что значения являются типом 'Integer', почему вы используете' getFloat'? В любом случае вы можете использовать его с помощью '(float) Integernumber' –

+0

Vector3 - это класс, для которого требуются значения' float'. И я не могу использовать 'i' для' float' из-за причины, о которой я упоминал выше. – erik4thewinners

+0

@ erik4thewinners, как вы ставите ценность в предпочтении, покажите мне этот код? – Aryan

ответ

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.

EDIT: выше может быть расширен следующим образом:

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

Это дополнительно поможет norrow вниз вопрос.