2

所以我有一个平铺图像 tile.png 并且我正在尝试在整个窗口中创建一个平铺地图。我正在将其构建为小程序。这就是我的绘画方法的样子,但它并不有效。当我运行小程序时,大约需要 2 秒,整个屏幕都是从左到右绘制图像,而不是一次渲染所有内容。此外,它看起来像一个大 tile.png 而不是 40 个小 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);
        }
    }
}

顺便说一句,tile.png 文件是 10 x 10 像素,这是实际的 img:

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

编辑:使用下面的代码并通过改进平铺图像我修复了这个问题。这是我的新瓷砖 img,以防它帮助某人:

瓷砖-new.png

4

2 回答 2

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

您需要偏移瓷砖的宽度/高度。

于 2009-03-06T23:22:26.713 回答
5

顺便说一句,您可能会想在某个时候开始检查您的“剪辑区域”,而不是在该区域之外绘制东西。您的代码设置得很好。

你可以做的另一件事是“双缓冲”。创建一个与地图大小相同的组件,为该组件调用 getGraphics(),对这个新的图形对象进行所有绘制,然后将组件绘制到传递给您的绘制方法的真实 Graphics 对象。

这样做的好处是,您可以在点击绘制语句之前绘制整个地图,然后立即将其拍掉。

Java 中的 Google 双缓冲以获取更多信息。

于 2009-03-06T23:39:44.863 回答