Pregunta

Tengo una imagen de mosaico tile.png y estoy intentando crear un mapa en mosaico en toda la ventana. Estoy construyendo esto como un applet. Así es como se ve mi método de pintura, pero no es efectivo. Cuando ejecuto el applet, toma aproximadamente 2 segundos y toda la pantalla se pinta de izquierda a derecha con la imagen, en lugar de todo lo que se muestra a la vez. Además, todo se ve como un azulejo.png grande en lugar de 40 instancias pequeñas de azulejo.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);
        }
    }
}

Por cierto, el archivo tile.png es de 10 x 10 píxeles, esta es la imagen real:

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

Editar: Usando el siguiente código y mejorando la imagen del mosaico, solucioné esto. Aquí está mi nuevo mosaico de imágenes en caso de que ayude a alguien:

 tile-new.png

¿Fue útil?

Solución

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

Necesitas desplazar el ancho / alto del mosaico.

Otros consejos

Como nota al margen, es probable que desee comenzar a revisar su " Región de recortes " en algún momento y no dibujar cosas fuera de esa región. Tu código está configurado bastante bien para hacer eso.

La otra cosa que podrías hacer para acelerarlo es " Double Buffer " ;. Cree un componente del tamaño de su mapa, llame a getGraphics () para ese componente, haga todo el dibujo de este nuevo objeto de gráficos, luego dibuje su componente en el objeto de Gráficos real pasado a su método de pintura.

Lo bueno de esto es que puedes dibujar todo tu mapa antes de que llegues a la declaración de pintura y luego abofetearlo instantáneamente.

Google Double Buffering en Java para obtener más información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top