SFGUI 渲染问题 C++
SFGUI rendering issue c++
我正在制作一个服务器菜单系统,但是当我从 sfgui 系统中删除所有项目并移动到另一个游戏状态时,在我将在一分钟内解释的情况下,前一个游戏状态的标签是可见的, 先给大家介绍一下问题
服务器菜单:
这里可以看到问题:
移除代码如下
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();
}
你们中有人知道如何解决这个问题吗?如果这样那就太好了。
我通过为每个屏幕创建一个单独的桌面来解决这个问题。
我正在制作一个服务器菜单系统,但是当我从 sfgui 系统中删除所有项目并移动到另一个游戏状态时,在我将在一分钟内解释的情况下,前一个游戏状态的标签是可见的, 先给大家介绍一下问题
服务器菜单:
这里可以看到问题:
移除代码如下
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();
}
你们中有人知道如何解决这个问题吗?如果这样那就太好了。
我通过为每个屏幕创建一个单独的桌面来解决这个问题。