贴图错误

Tile mapping error

本文关键字:错误      更新时间:2023-10-16

我还在学习SFML和c++,所以请理解我还处于基础水平。这是我第一次使用这个网站,所以IDK如果我做得对。我想创建一个函数,set,它将允许我传递一个二维数组作为参数并在数组中出现1时放置一个平铺。我可以用矩阵来画地图之类的东西。Ww为窗口宽度,wh为窗口高度。在main中,我创建了一个for循环,它将遍历瓷砖并将它们绘制到窗口。但是当我运行这个时,它给了我错误:分割故障(核心转储)"错误:139"。有没有更好的方法来做这件事,我做错了什么?谢谢你。

struct field
{
    int rectsizex;
    int rectsizey;
    RectangleShape * tiles;
    field (int s)
    {
        rectsizex = ww / s;
        rectsizey = wh / s;
        tiles = new RectangleShape[rectsizex * rectsizey];
    }
    ~field()
    {
        delete tiles;
    }
    RectangleShape * set(int ** matr)
    {
        Vector2f size((ww / rectsizex), (wh / rectsizey));      
        int posx = ww / rectsizex;
        int posy = wh / rectsizey;
        for(int x = 0; x<rectsizex; x++)
        {
            for(int y = 0; y<rectsizey; y++)
            {
                int i = ((x*rectsizey)+1)+y;
                tiles[i].setSize(size);
                if(matr[x][y] == 1)
                {
                    tiles[i].setFillColor(Color::Black);
                }
                else
                {
                    tiles[i].setFillColor(Color::White);
                }
                tiles[i].setPosition(x * posx, y * posy);   
            }
        }
        return tiles;   
    }

};

找出i的值:

int i = ((x*rectsizey)+1)+y;

这个值肯定在数组边界之外,因此会出现错误。使用调试器,或者在获得i值后添加一些打印语句。