0

私はゲームを持っています。それは 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 エントリがあり、各値は配列そのものです。

それがこの問題に対する私の素朴な見方です。ルックアップ速度を改善するための代替案、またはユニットがマップのすべてのタイルを占有する上記のケースを高く評価します。

ありがとう

4

1 に答える 1

0

このアプローチは、シナリオの更新に問題があると思います。ほとんどのユニットが位置を変更しようとすると、ルックアップ内の基になるリスト オブジェクトが更新されます。したがって、最初に修正する古い位置のルックアップリストが必要であり、次に新しい位置を検索して同じことを行います。これにより、ハッシュマップの利点がなくなります。

ユニットからタイルまで見上げた方がいい気がする。ほとんどの場合、ユニットの数がタイルの数よりも少ない場合 (大騒ぎの大虐殺ゲームを開発しない限りの一般的な状況)、ユニットから現在のタイル ウィンドウへのルックアップが適切です。

于 2012-09-14T05:23:03.530 に答える