今天早些時候,我問了一個關於如何將圖像作爲整個圖像的一部分依次放置的問題,以便我可以生成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