我正在尝试制作一个大小为400 * 400(像素)的网格。
然后,我加载一个纹理,并打算将其缩放到20 * 20。所以能装下400个
void gameLoop()
{
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT), "Minesweeper");
// Create the grid of sprites with the texture
std::vector<std::vector<sf::Sprite>> grid(DEFAULT_ROWS_NUM, std::vector<sf::Sprite>(DEFAULT_COLS_NUM));
sf::Texture unrevealedEmptyTexture;
if (!unrevealedEmptyTexture.loadFromFile("Images/unrevealed_empty.png"))
{
std::cerr << "Failed to load texture." << std::endl;
return;
}
// Set the position and scale of each sprite
for (int i = 0; i < DEFAULT_ROWS_NUM; i++)
{
for (int j = 0; j < DEFAULT_COLS_NUM; j++)
{
grid[i][j].setTexture(unrevealedEmptyTexture);
grid[i][j].setPosition(i * CELL_SIZE, j * CELL_SIZE);
grid[i][j].setScale(CELL_SIZE, CELL_SIZE);
}
}
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear(sf::Color::White);
drawBoard(window, grid);
window.display();
}
}
DEFAULT_ROWS_NUM
是20。DEFAULT_COL_NUM
是20。WINDOW_WIDTH
是400。WINDOW_HEIGHT
是400。CELL_SIZE
是20。
出了什么问题,是图像不缩放。我知道这一点,因为我只看到图像的左上部,这意味着它相对于窗口是巨大的...就像在外面一样。
我的问题是,我如何扩展它,使它像我想要的那样工作(每行20个)?
1条答案
按热度按时间zqry0prt1#
问题是
setScale
设置了缩放因子,而不是实际的尺寸。例如,对于原始尺寸为
512 * 512
的图像,setScale(20, 20)
将使其变为(512 * 20) * (512 * 20)