我正在与XNA游戏工作室制作游戏,现在我想用Java重写它.这就像2D Minecraft克隆.对于碰撞检测,我必须遍历游戏中的所有块以检查玩家是否与块碰撞.由于有大量的块,所以不可能这样做,因此我制作了一个网格系统.我将世界划分为包含块的网格,并将它们放入字典中.
Dictionary<string, List<Block>> gameBlocks;
Run Code Online (Sandbox Code Playgroud)
现在我只需遍历当前网格中的块.
这是注册块的方法:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我试图用Java重写它,但我不知道如何将某些内容放入Dictionary中.
使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意我为Java推荐的格式/命名样式所做的一些更正.
Java 有一个叫做 的东西HashMap
,可能对你有用。这是HashMap的文档。
例子:
HashMap<string, List<Block>>
Run Code Online (Sandbox Code Playgroud)