5

XNA game studio で作っていたゲームを Java で書き直そうと思っています。2D Minecraft のクローンのようなものです。衝突検出のために、ゲーム内のすべてのブロックをループして、プレイヤーがブロックと衝突しているかどうかを確認する必要があります。膨大な数のブロックでは無理なので、グリッドシステムを作りました。ブロックを含むグリッドに世界を分割し、それらを辞書に入れました。

Dictionary<string, List<Block>> gameBlocks;

これで、現在のグリッド内のブロックをループするだけで済みます。

ブロックを登録する方法は次のとおりです。

public void RegisterBlock(Block block)
{
    idX = (int)(block.blockPosition.X / width);
    idY = (int)(block.blockPosition.Y / height);
    string id = idX.ToString() + "_" + idY.ToString();
    if (gameBlocks.ContainsKey(id))
    {
        gameBlocks[id].Add(block);
    }
    else
    {
        gameBlocks.Add(id, new List<Block>());
        gameBlocks[id].Add(block);
    }
}

今、Javaで書き直そうとしていますが、辞書に何かを入れる方法がわかりません。

4

2 に答える 2

8

JavaのMapインターフェースとHashMapクラスを使用します。Javaでは、メソッドは次のようになります。

private Map<String, List<Block>> gameBlocks = new HashMap<String, List<Block>>(); // Java 6
// OR:
private Map<String, List<Block>> gameBlocks = new HashMap<>(); // Java 7

public void registerBlock(Block block) {
    idX = (int)(block.blockPosition.X / width);
    idY = (int)(block.blockPosition.Y / height);
    String id = idX + "_" + idY;
    if (gameBlocks.containsKey(id)) {
        gameBlocks.get(id).add(block);
    } else {
        gameBlocks.put(id, new ArrayList<Block>());
        gameBlocks.get(id).add(block);
    }
}

Javaが推奨するフォーマット/名前付けスタイルに対して私が行った修正のいくつかに注意してください。

于 2012-10-15T19:46:58.547 に答える
0

JavaにはHashMap、あなたにとって役立つかもしれないと呼ばれるものがあります。HashMapのドキュメントは次のとおりです。

例:

HashMap<string, List<Block>> 
于 2012-10-15T19:35:41.767 に答える