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:

 tile-new.png

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top