Hi, kann mir jemand sagen warum folgender code extrem langsam ist?
Wenn ich auf ein Feld klicke soll sich das terrain ändern, eben nur an der stelle wo ich hinklicke, aber wenn ich klicke dauerts ne sekunde oder so bis sich was tut... (die karte ist 100x100 felder groß, bzw einstellbar, aber auch bei kleineren karten dauert das aktualisieren extrem lange)
thx für alle möglichen verbesserungsvorschläge :$
Wenn ich auf ein Feld klicke soll sich das terrain ändern, eben nur an der stelle wo ich hinklicke, aber wenn ich klicke dauerts ne sekunde oder so bis sich was tut... (die karte ist 100x100 felder groß, bzw einstellbar, aber auch bei kleineren karten dauert das aktualisieren extrem lange)
Code:
//...
BufferedImage map;
int[][] mapAliases;
int scale=20;
int width; // in feldern, nicht in pixeln!
int height;
public Map( int width, int height, int terrainAlias ) {
this.width = width;
this.height = height;
this.setPreferredSize(new Dimension(width*scale, height*scale));
this.setSize(new Dimension(width*scale, height*scale));
map = new BufferedImage(scale*width, scale*height, BufferedImage.TYPE_3BYTE_BGR);
mapAliases = new int[width][height];
for ( int i=0; i<width; i++) {
for ( int j=0; j<height; j++) {
mapAliases[i][j] = -1;
}
}
}
// x und y sind Mouse positionen
public void changeTile( int x, int y, int terrainAlias ) {
x /= scale;
y /= scale;
if ( x<width && y<height && mapAliases[x][y] != terrainAlias) {
mapAliases[x][y] = terrainAlias;
Graphics g = map.getGraphics();
g.drawImage(MyGraphics.graphics.get(terrainAlias).getScaledInstance(scale, scale, BufferedImage.SCALE_FAST), x*scale, y*scale, null);
// System.out.println(" changed something ");
repaint();
}
else {
// System.out.println(" changed nothing ");
}
}
public void paintComponent( Graphics g ) {
g.setColor(Color.BLACK);
g.fillRect(0,0,this.getPreferredSize().width, this.getPreferredSize().height);
g.drawImage(map.getScaledInstance(width*scale, height*scale, 3), 0, 0, null);
}
thx für alle möglichen verbesserungsvorschläge :$