Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中创建平铺贴图?_Java_2d_Maps - Fatal编程技术网

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

如何在Java中创建平铺贴图?,java,2d,maps,Java,2d,Maps,所以我有一个tile image tile.png,我正在尝试创建一个整个窗口的平铺贴图。我正在构建一个小程序。这是我的绘画方法看起来的样子,但它并不有效。当我运行小程序时,大约需要2秒钟,整个屏幕从左到右绘制图像,而不是一次渲染所有内容。而且,它看起来像一个大的tile.png,而不是40个小的tile.png实例 public void paint(Graphics g) { Image tile=getImg("tile.png"); int width=this.getW

所以我有一个tile image 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);
        }
    }
}
public void绘制(图形g)
{
Image tile=getImg(“tile.png”);
int width=this.getWidth();
int height=this.getHeight();
int x;
int-y;

对于(x=0;x
for(x=0;x作为旁注,您可能希望在某个点开始检查“剪辑区域”,而不是在该区域之外绘制内容。您的代码设置得非常好,可以做到这一点

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

这样做的一个好处是,您可以在绘制语句之前绘制整个地图,然后立即将其删除


谷歌Java双缓冲获取更多信息。

它看起来更好,但不太正确……我希望每个磁贴都能与其他磁贴区分开来……太好了,我将tile.png文件大小增加到25x25,并在其周围创建了一个边框,看起来正是我现在想要的。谢谢!
    for (x=0; x<= width / tileWidth; x++)
    {
            for (y=0; y<= height / tileHeight ; y++)
            {
                    g.drawImage(tile, x * tileWidth, y * tileHeight, this);
            }
    }