今天早些时候,我问了一个关于如何将图像作为整个图像的一部分依次放置的问题,以便我可以生成2D图,就像您在旧的Pokemon游戏中看到的一样。一切都基于瓦片。图像没有正确生成
我已经到了我自己生成地图的地步,但它有点滑稽。
我已经跟踪到问题了,当我用瓦片对象填充HashMap。平铺对象包含名称和BufferedImage。看起来问题是程序如何从文件夹(png文件)中读取文件,并将它们放在HashMap中。
这是因为当我放置的图块对象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;
}
这里是输出,当我做一个toString()上的HashMap:
Tiles: (0,0.png)(1,1.png)(2,10.png)(3,100.png)....
公告如何在瓷砖1.png之后开始计数10,然后是100,然后是101,然后是102 ...然后当它达到112时,它开始像这样计数:
(112,2.png)(113,20.png)(114,200.png)(115,201.png)...
该文件夹中共有220个瓷砖,(计数瓷砖0.png)。 我清楚地看到了什么问题,但不是我如何解决它。
嗯,也许在列表中排序它首先听起来像一个吸引人的想法......但我担心它会按listFiles()的方式排序,如果我在列表中使用sort()。 – OmniOwl
@Vipar如果使用'Comparator',则可以通过使用来控制排序 – MadProgrammer
它应该按照字典顺序(即现在的方式)排序它们,但是您可以定义自己的比较器,它将名称转换为int并比较值。尽管如此,如果您碰巧拥有非int名称的文件,那么定义这样一个比较器是不安全的。 – svz