如何在Java中创建平铺地图?

时间:2009-03-06 23:20:41

标签: java 2d maps

所以我有一个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,以防它帮助某人:

tile-new.png

2 个答案:

答案 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中的双重缓冲以获取更多信息。