Hi,
Also ich habe bei meinem kleinen Spiel eine Tile Klasse, in dieser speicher ich Bilder in Form von BufferedImages. Diese Bilder lese ich mit einer Klasse. Nun zu meinen zwei Problemen. Das lesen aus dem Image dauert ewig lange für 50 * 50 Tiles sicher 15 -30 Sekunden. Und wenn ich 100 * 100 Tiles einstelle bekomm ich ein Java Heap Out Of Space Exception... Hier mal de Code.
Das reader Funktion:
Und hier das speicher in einem 2-Dimensionalen Array von meiner Tile-Klasse:
Ich glaube ein meiner LoadImage Funktion stimmt irgendetwas nicht...
Mfg, Templon
Also ich habe bei meinem kleinen Spiel eine Tile Klasse, in dieser speicher ich Bilder in Form von BufferedImages. Diese Bilder lese ich mit einer Klasse. Nun zu meinen zwei Problemen. Das lesen aus dem Image dauert ewig lange für 50 * 50 Tiles sicher 15 -30 Sekunden. Und wenn ich 100 * 100 Tiles einstelle bekomm ich ein Java Heap Out Of Space Exception... Hier mal de Code.
Das reader Funktion:
Code:
public static BufferedImage LoadImage(URL fileToLoad) {
BufferedImage result = null;
BufferedImage img = null;
Graphics g;
try {
img = ImageIO.read(fileToLoad);
result = new BufferedImage(img.getWidth(),img.getHeight(),BufferedImage.TYPE_3BYTE_BGR);
g = result.createGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
Und hier das speicher in einem 2-Dimensionalen Array von meiner Tile-Klasse:
Code:
public void fillMap() {
Runnable runnable = new Runnable() {
JProgressBar progressBar = new JProgressBar(0, mapTiles.length * mapTiles.length);
JFrame f = new JFrame();
int numberOfTiles = 0;
public void run() {
progressBar.setVisible(true);
progressBar.setStringPainted(true);
f.add(progressBar);
f.setPreferredSize(new Dimension(100,20));
f.setSize(new Dimension(100,20));
f.setAlwaysOnTop(true);
f.setVisible(true);
for (int x = 0; x < mapTiles.length; ++x) {
for (int y = 0; y < mapTiles.length; ++y) {
URL mypic = getClass().getClassLoader().getSystemResource("data/pictures/Grass1.jpeg");
mapTiles[x][y] = new Tile(x * 64, y * 64, ImageLoader.LoadImage(mypic));
numberOfTiles++;
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
progressBar.setValue(numberOfTiles);
}
});
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
Ich glaube ein meiner LoadImage Funktion stimmt irgendetwas nicht...
Mfg, Templon