Come creare una mappa piastrellata in Java?
Domanda
Quindi ho un'immagine tile tile.png e sto cercando di creare una mappa piastrellata in tutta la finestra. Sto costruendo questo come un applet. Ecco come appare il mio metodo di pittura, ma non è efficace. Quando eseguo l'applet ci vogliono circa 2 secondi e l'intero schermo viene dipinto da sinistra a destra con l'immagine, piuttosto che tutto il rendering in una volta. Inoltre, sembra tutto un grande tile.png piuttosto che 40 piccole istanze di tile.png
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);
}
}
}
Tra il file tile.png è di 10 x 10 pixel, questo è il vero img:
tile.png http://img12.imageshack.us/img12/1368/ tile.png
Modifica: usando il codice qui sotto e migliorando l'immagine della piastrella ho risolto questo problema. Ecco la mia nuova piastrella img nel caso in cui aiuti qualcuno:
Soluzione
for (x=0; x<= width / tileWidth; x++)
{
for (y=0; y<= height / tileHeight ; y++)
{
g.drawImage(tile, x * tileWidth, y * tileHeight, this);
}
}
Devi compensare la larghezza / altezza della piastrella.
Altri suggerimenti
Proprio come una nota a margine, probabilmente vorrai iniziare a controllare la tua "Clip Region" " ad un certo punto e non disegnare cose al di fuori di quella regione. Il tuo codice è impostato abbastanza bene per farlo.
L'altra cosa che potresti fare per accelerarlo è "Double Buffer". Crea un componente delle dimensioni della tua mappa, chiama getGraphics () per quel componente, fai tutto il tuo disegno su questo nuovo oggetto grafico, quindi disegna il tuo componente sull'oggetto grafico reale passato nel tuo metodo di disegno.
Una cosa bella di questo è che puoi disegnare l'intera mappa prima di toccare l'istruzione paint, quindi schiaffeggiarla all'istante.
Google Double Buffering in Java per ulteriori informazioni.