所以我有一个tile image tile.png,我试图在整个窗口创建一个平铺的地图。我正在将其构建为applet。这是我的绘画方法看起来像,但它没有效果。当我运行小程序时,它需要大约2秒钟,整个屏幕从左到右绘制图像,而不是一次渲染。此外,它看起来像一个大的tile.png而不是tile.png的40个小实例
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 tile.png文件是10 x 10像素,这是实际的img:
tile.png http://img12.imageshack.us/img12/1368/tile.png
编辑:使用下面的代码并通过改进平铺图像我修复了这个问题。这是我的新瓷砖img,以防它帮助某人:
答案 0 :(得分:9)
for (x=0; x<= width / tileWidth; x++)
{
for (y=0; y<= height / tileHeight ; y++)
{
g.drawImage(tile, x * tileWidth, y * tileHeight, this);
}
}
您需要偏移图块的宽度/高度。
答案 1 :(得分:5)
正如旁注,您可能想要在某个时刻开始检查“剪辑区域”而不是在该区域之外绘制内容。你的代码设置得非常好。
你可以做的另一件事就是加速“Double Buffer”。创建一个与地图大小相同的组件,为该组件调用getGraphics(),将所有绘图都绘制到这个新的图形对象,然后将组件绘制到传递给paint方法的真实Graphics对象中。
关于这个问题的一个好处是,你可以在你完成绘画声明之前绘制整个地图,然后立即将它拍出来。
Java中的双重缓冲以获取更多信息。