У меня сейчас проблема с закрытием SFML. Весь мой проект работает на MacBook Pro (15 дюймов, 2018) Catalina 10.15.3.
Мой проект заключается в создании системы Arcade на C ++. Мы работаем с системой Core, которая может взаимодействовать с динамической c графической c библиотекой и динамической c игровой библиотекой (обе созданы мной на C ++).
У меня есть 1 ncurses lib, 1 Библиотека SFML и одна библиотека SDL2. Основная задача состоит в том, чтобы мы могли переключать графическую / игровую библиотеку во время выполнения (все отлично работает). Все библиотеки открываются и закрываются с помощью библиотеки dl (выдается ошибка).
схема проекта
Но вот моя проблема: когда Я переключаюсь с 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 с изменениями, необходимыми в моем коде
Спасибо, надеюсь, у вас есть решение ! ;)