c++ SFML中的缩放纹理

fgw7neuy  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(143)

我正在尝试制作一个大小为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个)?

zqry0prt

zqry0prt1#

问题是setScale设置了缩放因子,而不是实际的尺寸。
例如,对于原始尺寸为512 * 512的图像,setScale(20, 20)将使其变为(512 * 20) * (512 * 20)

相关问题