1

Surfaceview を使用してゲームを書いていますが、データをバンドルに保存することに関して質問があります。

最初に、上下にのみ移動するスプライトの Y 座標 (整数の形式) を格納する arraylist がありました。次のように宣言されています。

static ArrayList<Integer> ycoordinates = new ArrayList<Integer>();

以下を使用して、それらをバンドルに保存しました。

myBundle.putIntegerArrayList("myycoordinates", ycoordinates);

そして、これを使用してそれらを復元しました:

ycoordinates.addAll(savedState.getIntegerArrayList("ycoordinates"));

これはすべて完璧に機能しました。ただし、座標系全体を変更する必要があったため、デルタ時間に基づいて、スプライトが異なる画面間で均一な速度で移動できるようにしました。これもまた完璧に機能しています。

ただし、この変更の結果、これらの値を整数ではなく浮動小数点数として格納する必要があります。

だから、私は次のように宣言しています:

static ArrayList<Float> ycoordinates = new ArrayList<Float>();

これが背景です。ここで私の質問は、Float Arraylist の値をどのように格納および復元するかです。「putFloatArrayList」または「getFloatArrayList」はないようです。

(スプライトの数を動的にする必要があるため、Array ではなく Arraylist を使用しました)。

どんな助けでも大歓迎です。

どうもありがとう

4

1 に答える 1

0

List と float[] の間で変換する簡単なメソッドをいくつか書きました。BundleputFloatArray()getFloatArrayfloat[] で使用できます。

import java.util.ArrayList;
import java.util.List;


public class Test {
  public static void main(String[] args){
    List<Float> in = new ArrayList<Float>();
    in.add(3.0f);
    in.add(1f);
    in.add((float)Math.PI);
    List<Float>out = toList(toArray(in));
    System.out.println(out);
  }

  public static float[] toArray(List<Float> in){
    float[] result = new float[in.size()];
    for(int i=0; i<result.length; i++){
      result[i] = in.get(i);
    }
    return result;
  }

  public static List<Float> toList(float[] in){
    List<Float> result = new ArrayList<Float>(in.length);
    for(float f : in){
      result.add(f);
    }
    return result;
  }

}
于 2012-12-05T17:31:39.540 に答える