私はゲームを持っています。それは 2D タイルベースのマップです。巨大なチェス盤のように見えます。プレイヤーはタイル上にユニットを持つことができます。特定のタイルにどのユニットが配置されているかを効率的に把握する方法が必要です。その理由は、マップの一部を画面にレンダリングするときに、レンダリング ループを遅くしたくないからです。どのユニットがどのタイルにいるかを見つけるのに時間をかけたくありません。
今、私は次のようなハッシュマップを考えています:
// Java pseudo-code:
Map<Integer, List<Unit>> units = new HashMap<Integer, List<Unit>>();
// place a unit at tile x,y:
int xy = y * mapWidth + x;
List<Unit> matched = units.get(xy);
if (matched == null) {
matched = new ArrayList<Unit>();
units.put(xy, matched);
}
matched.add(new Airplane());
// render a portion of the map to screen, say tiles 20,5 to 50,17
for (int y = 5; y < 17 y++) {
for (int x = 20; x < 50; x++) {
List<Unit> matched = units.get(y * mapWidth + x);
if (matched != null && matched.size() > 0) {
draw(matched.get(0));
}
}
}
巨大なマップがあり、プレイヤーがマップ内のすべてのタイルにユニットを配置すると、これが問題になることがわかります (起こりそうにありません)。その場合、ハッシュマップに mapWith*mapHeight エントリがあり、各値は配列そのものです。
それがこの問題に対する私の素朴な見方です。ルックアップ速度を改善するための代替案、またはユニットがマップのすべてのタイルを占有する上記のケースを高く評価します。
ありがとう