平铺映射错误

时间:2014-03-26 23:20:45

标签: c++ mapping sfml tile

我还在学习SFML和C ++,所以请理解我还处于基础水平。 这是我第一次使用这个网站IDK,如果我这样做的话。 我想创建一个函数set,它允许我传递一个二维数组作为参数,并在数组中有一个1时放置一个tile。所以我可以使用矩阵绘制地图和东西。 ww是窗口宽度,wh是窗口高度。在main中,我创建了一个for循环,它将遍历tile并将它们绘制到窗口中。但是当我运行它时它会给我错误:Segmentation Fault(core dumped)"错误: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;   
    }



};

1 个答案:

答案 0 :(得分:0)

找出你为i获得的价值:

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

这个值肯定在你的数组范围之外,因此错误。使用调试器,或在获得i值后输入一些print语句。