2012-10-15 17 views
5

Tworzyłem grę ze studiem XNA i teraz chcę przepisać ją na Javie. To jest jak klon 2D Minecrafta. Aby wykryć kolizję, muszę przechodzić przez wszystkie bloki w grze, aby sprawdzić, czy gracz koliduje z blokiem. Przy dużej liczbie bloków nie można tego zrobić, więc stworzyłem system siatki. Podzieliłem świat na siatki zawierające bloki i umieściłem je w słowniku.Słownik Javy <String, List <Object>>

Dictionary<string, List<Block>> gameBlocks; 

Teraz muszę tylko przechodzić przez bloki w bieżącej siatce.

Jest to metoda, aby zarejestrować blok:

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); 
    } 
} 

Teraz próbuję przepisać go w Javie, ale nie wiem jak umieścić coś w słowniku.

Odpowiedz

0

Java ma coś o nazwie HashMap, które może ci się przydać. Oto dokumentacja dla HashMap.

Przykład: Map interfejs

HashMap<string, List<Block>> 
7

Use Java i HashMap klasa. Metoda będzie wyglądać to w Javie:

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); 
    } 
} 

Wskazówka niektórych korekt zrobiłem dla zalecanej formatowania Java/style nazewnictwa.

Powiązane problemy