1

我正在使用 Surfaceview 编写游戏,并且有一个关于将数据保存到 Bundle 中的问题。

最初,我有一个数组列表,它存储只会上下移动的精灵的 Y 坐标(以整数的形式)。声明为:

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

我使用以下方法将它们保存到一个 Bundle 中:

myBundle.putIntegerArrayList("myycoordinates", ycoordinates);

并使用以下方法恢复它们:

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

这一切都很完美。但是,我不得不更改整个坐标系,使其基于 Delta 时间,以允许我的精灵在不同屏幕上以均匀的速度移动。这又是完美的工作。

但是,由于这种更改,我现在必须将这些值存储为浮点数而不是整数。

所以,我声明为:

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

这就是背景,现在我的问题是,如何存储和恢复浮点数组列表中的值?似乎没有“putFloatArrayList”或“getFloatArrayList”。

(我使用了 Arraylist 而不是 Array,因为精灵的数量需要是动态的)。

任何帮助,将不胜感激。

非常感谢

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 回答