SFML Открыть несколько windows: не позволю мне открыть более двух windows одновременно - PullRequest
0 голосов
/ 19 марта 2020

Хорошо, поэтому у меня есть программа, в которой есть пустота, которая открывает новое окно, а затем выводит на экран aws изображение в этом окне каждый раз, когда я вызываю пустоту. Это позволит мне открыть второе окно, но не позволит мне открыть его снова, пока я не закрою второе окно. Я думаю, что я думаю об этом неправильно, если я могу кто-то дать мне лучший способ сделать это. Вот мой код, я не думаю, что он на 100% необходим, но idk.

Моя цель - заставить его открывать несколько windows, выполняя свое дело на экране. Я пытаюсь открыть новое окно, вызывая DrawKey void.

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

class MakeKey
{
public:
    typedef struct KeySprite {
        sf::Image Img;
        sf::Texture Tex;
        sf::Sprite Sprite;
    }Key;
    static bool setTransparency(HWND hwnd, unsigned char alpha) { ... }
    static bool setShape(HWND hwnd, const sf::Image& image) { ... }
    static sf::Vector2i RandSpawn(sf::Image image) { ... }
    static void MakeTopWindow(HWND hwnd) { ... }

    static void DrawKey(string key)
    {
        const unsigned char opacity = 1000;
        Key Key;
        Key.Img.loadFromFile("Assets/Images/A.png");
        sf::RenderWindow window(sf::VideoMode(Key.Img.getSize().x, Key.Img.getSize().y, 32), "Key", sf::Style::None);
        setTransparency(window.getSystemHandle(), opacity);
        if (key == "A")
            Key.Img.loadFromFile("Assets/Images/A.png");
        else if (key == "D")
            Key.Img.loadFromFile("Assets/Images/D.png");
        else if (key == "E")
            Key.Img.loadFromFile("Assets/Images/E.png");
        else if (key == "Q")
            Key.Img.loadFromFile("Assets/Images/Q.png");
        else if (key == "S")
            Key.Img.loadFromFile("Assets/Images/S.png");
        else if (key == "W")
            Key.Img.loadFromFile("Assets/Images/W.png");
        else if (key == "X")
            Key.Img.loadFromFile("Assets/Images/X.png");
        else if (key == "Z")
            Key.Img.loadFromFile("Assets/Images/Z.png");
        else if (key == "Esc")
            Key.Img.loadFromFile("Assets/Images/esc.png");
        setShape(window.getSystemHandle(), Key.Img);
        Key.Tex.loadFromImage(Key.Img);
        Key.Sprite.setTexture(Key.Tex);
        window.setPosition(MakeKey::RandSpawn(Key.Img));
        while (window.isOpen())
        {
            MakeTopWindow(window.getSystemHandle());
            window.clear(sf::Color::Transparent);
            window.draw(Key.Sprite);
            window.display();
        }
    }

};

Main

int main()
{
    sf::RenderWindow window(sf::VideoMode(100, 100, 32), "Main Window", sf::Style::None);
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            MakeKey::MakeTopWindow(window.getSystemHandle());
            if (event.type == sf::Event::KeyPressed) {
                if (event.key.code == sf::Keyboard::A)
                    MakeKey::DrawKey("A");
                else if (event.key.code == sf::Keyboard::D)
                    MakeKey::DrawKey("D");
                else if (event.key.code == sf::Keyboard::E)
                    MakeKey::DrawKey("E");
                else if (event.key.code == sf::Keyboard::Q)
                    MakeKey::DrawKey("Q");
                else if (event.key.code == sf::Keyboard::S)
                    MakeKey::DrawKey("S");
                else if (event.key.code == sf::Keyboard::W)
                    MakeKey::DrawKey("W");
                else if (event.key.code == sf::Keyboard::X)
                    MakeKey::DrawKey("X");
                else if (event.key.code == sf::Keyboard::Z)
                    MakeKey::DrawKey("Z");
                else if (event.key.code == sf::Keyboard::Escape)
                    MakeKey::DrawKey("Esc");
            }
            if (event.type == sf::Event::Closed)
                window.close();
        }
        MakeKey::MakeTopWindow(window.getSystemHandle());
        window.clear(sf::Color::Transparent);
        window.display();
    }
    return EXIT_SUCCESS;
}

Нет ошибки, просто не делать то, что я хочу, и я хочу помочь выяснить, как заставить его делать то, что я хочу.

...