所以我让Enum称为Terrain
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数组,我想比较它,如果它与值相等,我将该tile存储在一个单独的图像数组中。
修改
对于那些说我应该放置一个getValue()方法的人,我想将我的值与所有Enums的东西进行比较,如果它相等(例如4,那么我可以设置我的图像(到污垢) 。
我在另一个班级检查这个。
答案 0 :(得分:1)
你已经拥有了getImage
的方法。只需为getValue
public int getValue() {
return value;
}
然后你可以做
if (2 == Terrain.DIRT.getValue())
//doSomething()
答案 1 :(得分:1)
一种可能性是将地形枚举中的静态函数添加为:
static Terrain getTerrainFor(int val)
{
for (Terrain t : Terrain.values())
{
if (t.value() == val)
return t;
}
return t;
}
调用它(Terrain.getTerrainFor(int))做逻辑
答案 2 :(得分: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!");
}
答案 3 :(得分: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
}
答案 4 :(得分:0)
在大多数情况下,最好的方法是摆脱整数并使用枚举类型。
Terrain terrain = somevalue;
if( terrain == Terrain.DIRT ) {
// do something
}
答案 5 :(得分:0)
如果你想从Terrain
获得int
,你可以使用内置valueOf(String)
的java(这对你的问题来说是最简单的解决方案)。
int i = 2;
Terrain t = Terrain.valueOf("" + i);
当然你必须将int转换为字符串(我使用了一个空字符串连接。
编辑:对你的问题最好的解决方案是使用一个静态数组,它在索引处包含Terrain
,使用一个静态方法,从那里得到它。