2012-10-15 13 views
5

XNAゲームスタジオでゲームを作っていましたが、今はJavaで書き直したいと思います。 2D Minecraftクローンのようなものです。衝突の検出のためには、ゲーム内のすべてのブロックをループして、プレーヤーがブロックに衝突しているかどうかをチェックする必要があります。膨大な数のブロックがあるとそうすることができないので、私はグリッドシステムを作った。私は世界をブロックを含むグリッドに分割し、それらを辞書に入れました。Java辞書<String、List <Object>>

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でそれを書き換えしようとしていますが、私は辞書の中に何かを置く方法がわかりません。

答えて

0

JavaにはHashMapという名前のものがありますが、それはあなたにとって役に立つかもしれません。ここにはHashMapのドキュメントがあります。

例:

HashMap<string, List<Block>> 
7

使用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の推奨フォーマットのために作った修正/の一部。