我有一个游戏,它是一个基于 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 条目,每个值本身就是一个数组。
这是我对这个问题的天真看法,希望有任何提高查找速度的替代方案或上述单位占据地图每个图块的情况,
谢谢