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

问题描述 投票:2回答:2

所以我有一个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);
        }
    }
}

在tile.png文件之间是10 x 10像素,这是实际的img:

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

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

tile-new.png

java 2d maps
2个回答
9
投票
    for (x=0; x<= width / tileWidth; x++)
    {
            for (y=0; y<= height / tileHeight ; y++)
            {
                    g.drawImage(tile, x * tileWidth, y * tileHeight, this);
            }
    }

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


5
投票

就像旁注一样,你可能想要在某个时刻开始检查你的“剪辑区域”而不是在该区域之外绘制东西。你的代码设置得非常好。

你可以做的另一件事就是加速“Double Buffer”。创建一个与地图大小相同的组件,为该组件调用getGraphics(),将所有绘图都绘制到这个新的图形对象,然后将组件绘制到传递给paint方法的真实Graphics对象中。

关于这一点的一个好处是你可以在你完成绘制语句之前绘制整个地图,然后立即将其打开。

Java中的双重缓冲更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.