今天早些时候,我问了一个问题,关于如何将图像按顺序放置为整张图片的一部分,这样我就可以生成像你在旧口袋妖怪游戏中看到的 2D 地图。一切都是基于瓷砖的。
我已经到了我自己生成地图的地步,但结果有点好笑。
当我用 Tile Objects 填充 HashMap 时,我已经跟踪到了这个问题。一个 Tile 对象包含一个 Name 和一个 BufferedImage。问题似乎是程序如何从填充有瓷砖(png文件)的文件夹中读取文件并将它们放置在HashMap中。
这是我将 Tile 对象放入 HashMap 时的代码:
private static HashMap<Integer, Tile> getTiles(String path) throws IOException {
HashMap<Integer, Tile> temp = new HashMap<>();
File folder = new File(path);
Tile tile;
int counter = 0;
for(File file : folder.listFiles()) {
if(file.isFile()) {
try {
if(file.getCanonicalPath().endsWith(".png")) {
tile = new Tile(file.getName(),ImageIO.read(file));
temp.put(counter, tile);
counter++;
}
} catch(IOException ioe) {
System.out.println("Picture number " + counter + " could "
+ "not be saved in the hashmap: \n"
+ ioe.getMessage());
continue;
}
}
}
return temp;
}
这是我在 HashMap 上执行 toString() 时的输出:
Tiles: (0,0.png)(1,1.png)(2,10.png)(3,100.png)....
请注意,在 tile 1.png 之后,它开始计数 10,然后是 100,然后是 101,然后是 102……然后当它达到 112 时,它开始像这样计数:
(112,2.png)(113,20.png)(114,200.png)(115,201.png)...
此文件夹中共有 220 个 Tiles,(计算 tile 0.png)。我清楚地看到问题是什么,但不是我如何解决它。