SFML 在加载多个纹理和精灵后没有响应

SFML not responding after loading multiple textures and sprites

提问人:Blifix 提问时间:10/23/2023 最后编辑:Blifix 更新时间:10/23/2023 访问量:27

问:

我在SFML中编码了很多东西,但从来没有遇到过这个问题,我有最简单的调用,我决定等待,因为这是稍后在代码中发生的事情,所以我想测试它,无论出于何种原因,这都会使我的窗口无响应,这是我的主要:

int main()
{
    sf::RenderWindow window(sf::VideoMode(1920, 1400), "R-TYPE");
    game_state screen;
    screen = game_state::MENU;
    menu menu_state;
    game game_state;

    while (window.isOpen()) {
        if (screen == game_state::MENU)
            menu_state.menu_screen(screen, window);
        else if (screen == game_state::GAME)
            game_state.game_screen(screen, window);
        else if (screen == game_state::END)
            return (0);
    }
    return 0;
}

剩下的就是了

int menu::menu_screen(game_state &screen, sf::RenderWindow &window)
{
    sf::Event event;

    while (window.isOpen()) {
        if (animating == true)
            menuAnimation(window);
        while (window.pollEvent(event)) {
            handle_window(window, event);
            if (event.type == sf::Event::KeyPressed) {
                if (event.key.code == sf::Keyboard::Escape) {
                    window.close();
                    return 0;
                }
                if (event.key.code == sf::Keyboard::Return) {
                    screen = game_state::GAME;
                    return 1;
                }
            }
        }

    }
    return 0;
}


void menu::menuAnimation(sf::RenderWindow& window)
{

    sf::Clock clock;
    sf::Time loopTime = sf::seconds(10.0f);
    while (clock.getElapsedTime() < loopTime) {
        window.clear();
        window.display();
    }


    window.clear();
    animating = false;
}


void menu::handle_window(sf::RenderWindow& window, sf::Event event)
{
    if (event.type == sf::Event::Closed) {
        window.close();
    }
}

我似乎真的不明白为什么,如果我用任何需要那么长时间的东西替换 menuAnimation,例如在屏幕上做事的 while 循环“出于动画目的,它仍然做同样的事情有人知道它可能是什么吗?这就是发生的事情

这个列表太长了,但我已经尝试了我所知道的几乎所有事情。

C++ 崩溃 窗口 SFML

评论

0赞 Blifix 10/23/2023
我会把它放在这里,以防万一有人遇到同样的问题,但我对此表示怀疑,在任何 while 循环中,您都需要轮询事件以关闭窗口,否则它会崩溃,因为即使您绘制窗口或做事,窗口仍然需要处理事件,否则它会崩溃
1赞 Nelfeal 10/23/2023
如果您解决了问题,您可以只发布答案而不是评论它。是的,任何程序都需要处理事件才能作系统视为活动事件,并且不会被标记为“无响应”。当然,不同的操作系统可能会以不同的方式处理这个问题。

答: 暂无答案