1

所以我有枚举称为地形

public enum Terrain {
    DIRT(4, "res/imgs/DirtTile.png"), GRASS(5, "res/imgs/GrassTile.png");

    private String filePath;
    private Image image;
    private boolean imageLoaded;
    private int value;

    Terrain(int val, String imagePath) {
        value = val;
        filePath = imagePath;
        imageLoaded = false;
    }

    public Image getImage() {
        if (!imageLoaded) {
            loadImage();
        }
        return image;

    }

    public void loadImage() {
        try {
            image = ImageIO.read(new File(filePath));
        } catch (IOException e) {
            System.err.println("Failed to load image!");
            e.printStackTrace();
        }
        imageLoaded = true;
    }
}

我想要的是能够将 int 与地形值进行比较,这样如果它相等,则地形将被绘制到屏幕上。

我在想类似的东西

if(int==Terrain.value){} 

但我真的不知道该怎么做。如果有人可以帮助我解决这个问题,我有一个 int 数组,我想将它与它进行比较,如果它确实等于该值,我将该图块存储在一个单独的图像数组中。

编辑:

对于那些说我应该使用 getValue() 方法的人,我想将我的值与所有 Enums 的东西进行比较,如果它等于(例如,等于 4,那么我可以将我的图像设置为污垢)。

我正在另一个班级检查这个。

4

6 回答 6

1

你已经有了getImage. 只需添加一个类似的方法getValue

public int getValue() {
    return value;
}

那么你可以做

if (2 == Terrain.DIRT.getValue())
    //doSomething()
于 2013-07-29T13:02:21.313 回答
1

一种可能性是向 Terrain 枚举添加一个静态函数,如下所示:

static Terrain getTerrainFor(int val)
{
   for (Terrain t : Terrain.values())
   {
      if (t.value() == val)
         return t;
   }

   return t;
}

调用这个 (Terrain.getTerrainFor(int)) 做逻辑

于 2013-07-29T13:02:50.050 回答
1

getValue()向枚举添加一个方法:

public int getValue() {
    return value;
}

无论您在哪里有Terrain枚举的实例,都可以调用该getValue()方法并根据需要进行比较:

Terrain t = Terrain.DIRT;
if (t.getValue() == 4) {
    System.our.println("The terrain value is 4!");
}
于 2013-07-29T13:03:04.043 回答
1
    enum Terrain{


    private int value;
    private static final Map<Integer, Terrain> terrainMap;

    static{
        terrainMap = new HashMap<Integer, Terrain>();
        for(Terrain type: values()){
            terrainMap.put(type.value, type);
        }
    }

    public static Terrain getTerrain(int value){
         return terrainMap.get(value);
    }

    }

使用此枚举的代码:

Terrain terrain = Terrain.getTerrain(4);

switch(terrain){
   case DIRT:
   //draw dirt
}
于 2013-07-29T13:13:05.933 回答
0

在大多数情况下,最好的办法是去掉 int 并使用 enum 类型。

  Terrain terrain = somevalue;
  if( terrain == Terrain.DIRT ) {
    // do something
  }
于 2013-07-29T13:17:34.170 回答
0

如果你想Terrain从一个int你可以使用java的内置valueOf(String)(这将是你的问题最简单的解决方案)。

int i = 2;
Terrain t = Terrain.valueOf("" + i);

当然,您必须将 int 转换为字符串(为此,我使用了与空字符串的连接。

编辑:解决您的问题的最佳解决方案是使用包含Terrainat 索引的静态数组,并使用静态方法将其从那里取出。

于 2013-07-29T13:18:42.297 回答