Pergunta

Então, eu tenho um tile.png imagem Telha e eu estou tentando criar um azulejos mapear toda a janela. Estou construindo isso como um applet. Isto é o que o meu método de pintura parece, mas não é eficaz. Quando eu executar o applet demora cerca de 2 segundos e a tela inteira é pintada da esquerda para a direita com a imagem, em vez de tudo prestados de uma só vez. Além disso, todos os olhares como um grande tile.png em vez de 40 pequenas ocorrências de 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);
        }
    }
}

Btw o arquivo tile.png é de 10 x 10 pixels, este é o img real:

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

Edit: Usando o código abaixo e melhorando a imagem Telha i fixo isso. Aqui está meu novo img telha no caso de ajuda de alguém:

tile-new.png

Foi útil?

Solução

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

Você precisa compensada pela largura / altura da telha.

Outras dicas

Assim como uma nota lateral, você provavelmente vai querer começar a verificar o seu "Clipe Região" em algum momento e não desenhar coisas fora dessa região. Seu código está configurado muito bem fazer isso.

A outra coisa que você poderia fazer para acelerá-lo é "buffer duplo". Criar um componente do tamanho do seu mapa, getGraphics chamada () para esse componente, fazer todo o seu desenho para este novo objeto gráfico, em seguida, basta chamar a componente para o Graphics objeto real passou para o seu método de pintura.

A coisa agradável sobre este é que você pode desenhar seu mapa inteiro antes que você nunca atingiu a declaração de tinta, em seguida, bater-lo imediatamente.

O Google buffer duplo em Java para mais informações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top