Я все еще изучаю SFML и C ++, поэтому, пожалуйста, поймите, что я все еще на базовом уровне.
Я впервые использую этот сайт, поэтому IDK, если я делаю это правильно.
Я хочу сделать функцию, set
, это позволит мне передать 2d массив в качестве аргумента и поместить плитку вниз, когда в массиве есть 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;
}};
Узнайте, какие значения вы получаете для меня:
int i = ((x*rectsizey)+1)+y;
Это значение определенно выходит за границы вашего массива, следовательно, ошибка. Используйте отладчик или поместите несколько операторов печати после получения значения i.
Других решений пока нет …