sfml помещает sf :: View поверх defaultVeiw - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь создать проект, который требует манипулирования представлением, отображаемым поверх другого представления. Я также хотел бы сделать так, чтобы там, где это представление ничего не отображалось, было прозрачным. Когда я пытаюсь это сделать, мой вид наложения не отображается. Я прочитал руководство и просмотрел некоторые популярные сайты форумов и не нашел ничего полезного. Пожалуйста, помогите.

Вот пример кода того, как я пытаюсь это сделать

int main() {
    sf::RenderWindow mainWindow;
    mainWindow.create(sf::VideoMode(800, 900, 300), "SFML Works", sf::Style::Close);

    sf::View projectsVeiw;
    sf::RectangleShape projectsBox;
    projectsBox = sf::RectangleShape(sf::Vector2f(400, 225));
    projectsBox.setOrigin(sf::Vector2f(-10, -130));
    projectsBox.setOutlineColor(sf::Color::Black);
    projectsBox.setOutlineThickness(10);
    projectsBox.setFillColor(sf::Color::Transparent);
    projectsVeiw.setViewport(projectsBox.getGlobalBounds());

    sf::RectangleShape randomBox;
    randomBox = sf::RectangleShape(sf::Vector2f(100, 100));
    randomBox.setOrigin(sf::Vector2f(-50, -50));
    randomBox.setOutlineColor(sf::Color::Black);
    randomBox.setOutlineThickness(10);
    randomBox.setFillColor(sf::Color::Yellow);

    while (mainWindow.isOpen()) {
        mainWindow.clear(sf::Color::White);
        mainWindow.draw(projectsBox);

        mainWindow.setView(projectsVeiw);
        mainWindow.draw(randomBox);

        mainWindow.setView(mainWindow.getDefaultView());
        mainWindow.display();
    }
}

1 Ответ

1 голос
/ 09 мая 2020

Вы должны установить вид, прежде чем рисовать в mainWindow. Из-за l oop вы фактически рисуете projectsBox через представление по умолчанию и randomBox через projectsView. .) в окне. Представление - это не отдельный холст. Вам нужно нарисовать главное окно с обычным видом, а затем нарисовать окно наложения где-нибудь в другом месте вашего мира после настройки нового вида наложения, чтобы оно отображалось на экране в нужном месте.

Оно будет прозрачным, если вы ничего не рисуй.

...