0

私が作成しているゲームでは、リストからオブジェクトを常に検索し、その座標が隣接しているかどうかを確認する必要があります。これらのオブジェクトは何百もあり、そのうちの 4 つしか正しくありません。これを行うより良い方法はありますか?

リストは getMap.getTerrain(x,y); にあります。

これは、オブジェクトの dataValue を保持する 2 次元の int 配列です。

    int[] r = new int[4];
    int tX = (int)(getX()/32);
    int tY = (int)(getY()/32);
    if((tY > 1) && (tX > 1) && (tY < 39) && (tX < 39))
    {
    r[0] = getMap().getTerrain(tX-1, tY);
    r[1] = getMap().getTerrain(tX+1, tY);
    r[2] = getMap().getTerrain(tX, tY-1);
    r[3] = getMap().getTerrain(tX, tY+1);
    //}
    }
    int resource = 0;
    for(int i : r) if(i != 0) resource = i; 
    if(resource != 0)
    {
        System.out.println("R isnt 0, We are next to a "+resource);
    }
4

1 に答える 1

0

うーん... getTerrain が 40x40 の 2 次元配列の値を検索する場合、それほど高速になるとは思えません。唯一の問題は、配列がまばらで、リソースがマップ全体に分散している場合です。その場合、ほとんどが 0 で埋められた 1,600 個の配列要素があります。それがまばらで、100 x 100 または 1,000 x 1,000 の大きなマップが必要な場合は、Point クラスと、ポイントがキーである HashMap を調べる必要があります。 . Get Terrain は、ハッシュ マップにない要素に対して 0 を返すことができます。それ以外の場合は、小さい 2 次元配列に固執する場合は、ひどく見えません。

于 2013-03-03T20:12:45.097 に答える