2009-03-06 6 views
2

Also ich habe ein Kachel Image tile.png und ich versuche, eine gekachelte Karte über das gesamte Fenster zu erstellen. Ich baue das als Applet. So sieht meine Malmethode aus, ist aber nicht effektiv. Wenn ich das Applet starte, dauert es etwa 2 Sekunden und der gesamte Bildschirm wird von links nach rechts mit dem Bild gemalt, anstatt alles auf einmal zu rendern. Auch alles sieht aus wie eine große tile.png anstatt 40 kleine Instanzen tile.pngWie erstellt man eine gekachelte Karte in Java?

public void paint(Graphics g) 
{ 
    Image tile=getImg("tile.png"); 
    int width=this.getWidth(); 
    int height=this.getHeight(); 

    int x; 
    int y; 
    for (x=0; x<= width; x++) 
    { 
     for (y=0; y<= height; y++) 
     { 
      g.drawImage(tile, x, y, this); 
     } 
    } 
} 

Btw die tile.png Datei 10 x 10 Pixel, das ist die eigentliche img:

tile.png http://img12.imageshack.us/img12/1368/tile.png

Edit: Mit dem unten stehenden Code und durch die Verbesserung der Kachel Image habe ich das behoben. Hier ist meine neue Fliesen img falls es hilft jemand:

tile-new.png http://i44.tinypic.com/11ufejk.png

Antwort

9
for (x=0; x<= width/tileWidth; x++) 
    { 
      for (y=0; y<= height/tileHeight ; y++) 
      { 
        g.drawImage(tile, x * tileWidth, y * tileHeight, this); 
      } 
    } 

Sie müssen durch die Breite/Höhe der Fliese kompensieren.

+0

Es sieht besser aus, aber nicht ganz richtig .. http://i41.tinypic.com/27y4d4x.jpg. Ich möchte, dass jede Kachel von der anderen zu unterscheiden ist. –

+0

Großartig, ich habe die Dateigröße von tile.png auf 25x25 erhöht und einen Rahmen um sie herum erstellt, der genauso aussieht, wie ich es jetzt wollte. Vielen Dank! –

5

Nur als eine Randnotiz, werden Sie wahrscheinlich Ihre "Clip Region" irgendwann überprüfen und keine Sachen außerhalb dieser Region zeichnen wollen. Ihr Code ist ziemlich gut dafür eingerichtet.

Die andere Sache, die Sie tun könnten, um es zu beschleunigen, ist "Double Buffer". Erstellen Sie eine Komponente mit der Größe Ihrer Map, rufen Sie getGraphics() für diese Komponente auf, führen Sie Ihre gesamte Zeichnung zu diesem neuen Grafikobjekt aus und zeichnen Sie dann Ihre Komponente zu dem realen Graphics-Objekt, das Sie an Ihre Paint-Methode übergeben haben.

Eine schöne Sache ist, dass Sie Ihre gesamte Karte zeichnen können, bevor Sie jemals die Paint-Anweisung treffen, dann schlagen Sie es sofort aus.

Google Double Buffering in Java für weitere Informationen.

Verwandte Themen