2015-06-22 2 views
1

Я создаю систему меню сервера, однако, когда я удаляю все элементы из системы sfgui и перехожу к другому состоянию игры, метки из предыдущего состояния игры видны при обстоятельствах, которые я объясню в минуту, сначала позвольте мне показать вам эту проблему.Проблема с предоставлением SFGUI C++

меню Сервер: Server Menu.

Здесь вы можете увидеть проблему: Here you can see the issue

Код для удаления заключается в следующем.

void S_ServerMenu::Exit() { 
    ServerSelectWindow->Show(false); 
    desktop.RemoveAll(); 
    desktop.Refresh(); 
} 

Однако эта проблема возникает только при обновлении серверов, вот код обновления.

void S_ServerMenu::RefreshServers() { 
    Document d; 
    d.Parse<0>(LoadInServers().c_str()); 
    servers = ServerParser(d); 
    ServerListTable->RemoveAll(); 
    ServerListTable->RefreshAll(); 
    for(int i = 0; i < servers.size(); i++) { 
    auto label = sfg::Label::Create(); 

    label->SetText(servers[i].Name); 

    MenuItem utm; 
    utm.lbl = label; 
    utm.index = i; 
    utm.owner = this; 
    label->SetAlignment(sf::Vector2f(0, 0)); 
    label->FontSize = 16; 
    label->SetParent(ServerListTable); 
    label->cont = ServerSelectWindowContainer; 
    ServerListTable->Attach(label, sf::Rect<sf::Uint32>(1, i, 1, 1), sfg::Table::FILL | sfg::Table::EXPAND); 

    label->GetSignal(sfg::Label::OnLeftClick).Connect(std::bind(&MenuItem::Clicked, utm)); 
    } 
    ServerSelectWindow->RefreshAll(); 
} 

Вы знаете, как это решить, если это так, что было бы здорово.

+0

Все, что я могу сказать, это то, что вы используете SFGUI неправильно. Я должен посмотреть приведенный пример кода в репозитории SFGUI. Также вы отредактировали библиотеку? Потому что 'label-> cont' не существует. Как только вы запустите свою модифицированную версию любой библиотеки, вы в основном сами по себе. – Lukas

+0

Cont - это буквально общий указатель на стол. Это не должно повлиять на это. – user2437820

+0

Итак, вы редактировали библиотеку? Если вы начнете редактировать библиотеку, никто не узнает, случайно ли вы что-то сломали. Но, как я уже сказал, для этой проблемы вы действительно должны смотреть на предоставленные примеры и подстраивать свой код к этому, вместо того, чтобы пытаться случайным образом в надежде, что это сработает ... – Lukas

ответ

0

Я исправил это, создав отдельный рабочий стол для каждого экрана.