Como criar um mapa de azulejos em Java?
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:
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.