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

1 つの可能性は、次のように Terrain 列挙型に静的関数を追加することです。

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

   return t;
}

これを呼び出す (Terrain.getTerrainFor(int)) do logic

于 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 に答える
0

このようなほとんどの場合、最善の方法は int を取り除き、代わりに列挙型を使用することです。

  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 を文字列に変換する必要があります (そのために空の文字列との連結を使用しました。

編集:あなたの問題に対する最善の解決策はTerrain、静的メソッドを使用してインデックスに含まれる静的配列を使用して、そこからそれを取得することです。

于 2013-07-29T13:18:42.297 に答える