Изменение размера окна SFML очень уродливо - PullRequest
0 голосов
/ 26 апреля 2020

Когда я изменяю размеры своего окна sfml, когда я сокращаю его, чтобы уменьшить его, и изменю, чтобы увеличить, это дает вам действительно странный эффект. A cut out green circle A

Как сделать изменение размера более красивым? Код из учебника по установке для code :: blocks. Код (аналогично коду в руководстве по установке для code :: blocks на сайте sfml):

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}

1 Ответ

2 голосов
/ 27 апреля 2020

Вам необходимо управлять изменением размера окна. В противном случае координаты неверны. Вот выдержка из вашего кода с решением. Кредит go автору этого поста на форуме. Здесь я однажды нашел его, когда искал решение: https://en.sfml-dev.org/forums/index.php?topic=17747.0

Дополнительно вы можете установить новые координаты на основе на новый размер. Ссылка дает вам больше информации.

// create own view
sf::View view = window.getDefaultView();

while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();

        if (event.type == sf::Event::Resized) {
            // resize my view
            view.setSize({
                    static_cast<float>(event.size.width),
                    static_cast<float>(event.size.height)
            });
            window.setView(view);
            // and align shape
        }
    }
...