Окно SFML не закрывается (она не отвечает) при запуске термина Mac OS Ncurses - PullRequest
1 голос
/ 28 марта 2020

У меня сейчас проблема с закрытием SFML. Весь мой проект работает на MacBook Pro (15 дюймов, 2018) Catalina 10.15.3.

Мой проект заключается в создании системы Arcade на C ++. Мы работаем с системой Core, которая может взаимодействовать с динамической c графической c библиотекой и динамической c игровой библиотекой (обе созданы мной на C ++).

У меня есть 1 ncurses lib, 1 Библиотека SFML и одна библиотека SDL2. Основная задача состоит в том, чтобы мы могли переключать графическую / игровую библиотеку во время выполнения (все отлично работает). Все библиотеки открываются и закрываются с помощью библиотеки dl (выдается ошибка).

схема проекта

project schema

Но вот моя проблема: когда Я переключаюсь с SFML на Ncurses, мое окно SFML не закрывается (не отвечает), но когда я переключаюсь на SDL2, оно закрывается правильно и мгновенно.

/* this->_window declaration is sf::RenderWindow _window; */

/* Method called in main loop (equal to a window.isOpen() for generic code) */
bool GraphicSfml::shouldExit() const
{
    return (this->_exit);
}

/* Method called when special event is catch */
void GraphicSfml::exit()
{
    this->_window.close();
    this->_exit = !this->_window.isOpen();
}

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

/* The actual main loop in my Core class, declarations are:
       std::shared_ptr<IGraphics> _lib;
       std::shared_ptr<IGameLogic> _game;
       Arcade::Event e; my custom event
       Arcade::Event::EventTypeEnum::EXIT;
       Arcade::Event::EventTypeEnum::NEXTL; next graph lib
       std::vector<Arcade::AGraphicElement *> elems; graphical element containing to draw 
                                                     (like sf::Rect, sf::Text, ...)
*/
while (!this->_lib->shouldExit()) {
    this->_lib->doClear();
    while (this->_lib->pollEvent(e)) {
        switch (e.getType()) {
            case EXIT:
            this->_lib->exit();
            break;
            case NEXTL:
            switchLibGraph(true);
            default:
            this->_game->onEvent(e);
            break;
        }
        e = Event(UNKNOW);
    }
    elems = this->_game->updateGame();
    displayGameElements(elems);
    this->_lib->doRefresh();
}

Пробовал вещи, которые не закрывались:

  • Ожидание все события в пустую очередь событий SFML
  • Измените мой логический тип с помощью window.isOpen () SFML с изменениями, необходимыми в моем коде

Спасибо, надеюсь, у вас есть решение ! ;)

...