проблемы с отображением, при создании сапера c++ sfml
Итак, я рисую двумерный массив (19 на 19) карты сапера, если рисовать весь двумерный массив, то приходится выводить каждый элемент массива. Но это слишком медленно и из-за этого событие мыши происходит не сразу (т.е ячейка открывается с маленькой задержкой). Есть еще один вариант - это рисовать определенную ячейку, но он у меня тоже не получился т.к при рисовании определенной ячейки другие пропадают и остается только эта ячейка, (пропадают все кроме тех на которые я нажал), но после второго нажатия ячейки появляются итак по кругу.
все ячейки
первый клик
второй клик
третий клик
сам код
sf::Texture draw_grid_element(char element)
{
sf::Texture texture;
switch (element)
{
case 'p':
texture.loadFromFile("images/plite.jpg");
return texture;
case '0':
texture.loadFromFile("images/pass.jpg");
return texture;
case 'b':
texture.loadFromFile("images/bomb.jpg");
return texture;
case '1':
texture.loadFromFile("images/one.jpg");
return texture;
case '2':
texture.loadFromFile("images/two.jpg");
return texture;
case '3':
texture.loadFromFile("images/three.jpg");
return texture;
case '4':
texture.loadFromFile("images/four.jpg");
return texture;
case '5':
texture.loadFromFile("images/five.jpg");
return texture;
case '6':
texture.loadFromFile("images/six.jpg");
return texture;
case '7':
texture.loadFromFile("images/seven.jpg");
return texture;
case '8':
texture.loadFromFile("images/eight.jpg");
return texture;
default:
break;
}
}
void draw_game_grid(sf::RenderWindow &window)
{
sf::Sprite tile;
for (int i = 1; i < TILE_HEIGHT_COUNT; i++)
{
for (int j = 1; j < TILE_WIDTH_COUNT; j++)
{
sf::Texture texture = draw_grid_element(draw_grid[i][j]);
tile.setTexture(texture);
tile.setPosition((i * TILE_SIZE) - TILE_SIZE, (j * TILE_SIZE) - TILE_SIZE);
window.draw(tile);
}
}
}
window.display();
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
if (event.type == sf::Event::MouseButtonPressed)
{
if (event.mouseButton.button == sf::Mouse::Left)
{
int mouse_x = event.mouseButton.x / TILE_SIZE + 1;
int mouse_y = event.mouseButton.y / TILE_SIZE + 1;
draw_grid[mouse_x][mouse_y] = game_grid[mouse_x][mouse_y];
draw_element(window, mouse_x, mouse_y);
window.display();
}
}
}
}



