我正在与XNA游戏工作室制作游戏,现在我想用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重写它,但我不知道如何将某些内容放入字典中。
答案 0 :(得分: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建议的格式化/命名样式所做的一些更正。
答案 1 :(得分:0)