2017-02-15 6 views
0

ゲームライブラリLibGDXを使用して2Dゲームを作成します。ゲームが始まると、いくつかの変数はPreferencesファイルの値で埋められます(https://github.com/libgdx/libgdx/wiki/Preferences参照)。Android/LibGDX - 整数をfloatにキャストすることはできませんが、デスクトップでうまく動作します。

私のGamePreferencesクラスでは、私はhelpingRectsと呼ばれる配列(Vector3)を持っています。 x値は、に見出すことができる

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ベクトルが追加される:forループでは、アレイは、環境設定ファイルの値で埋めなければなりません設定ファイル "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) 

だから、基本的には、明らかにintある変数iは、float値にキャストすることはできません。 .prefsの私のエントリは、「helpingrect0.0x」と呼ばれていないので、

は、誰かが解決策を知ってい

など、なぜならこの場合に役立つ i0.0/1.0などに等しいが、これは悪くないん floatintから iを変更しますこの問題のために?あなたは、私はそれは難しい iintであるため、エラーがあると信じて見つけるあなたのコードを見て、 String.format("%.0f", i)

セカンドを使用する場合はfloat i = 0を使用することができ、

+0

なぜそれらを「整数」として取得したくないのですか? stacktraceは、値が 'Integer'の型であることを示唆します。なぜ' getFloat'を使用しますか?とにかく '(float)Integerumber'でキャストすることができます –

+0

Vector3は' float'値を必要とするクラスです。そして、私は上記の理由のために '私は'フロートにキャストすることはできません。 – erik4thewinners

+0

@ erik4thewinnersどのようにあなたは好みの価値を置いて、そのコードを表示しますか? – Aryan

答えて

0

まず事前にありがとうございます。

ただ、テストのために、それが動作するかどうかを確認するために、1本のラインをハードコーディングしてみてください:

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するのに役立つでしょう。

関連する問題