您的位置:首页 > 产品设计 > UI/UE

游戏中一个简单的UI问题

2017-10-12 18:27 344 查看
通常在设计ui框架的时候,会以类似栈的数据结构(非栈)进行存储管理,将打开界面进行入栈操作,将关闭界面进行出栈操作。

同时,在打开某界面的时候,可能将上个界面隐藏,在关闭这个界面的时候,恢复显示上个界面。

大致代码如下:

private void PushPanel(Panel panel, bool hidePrev = true)
{
if (panel == null)
{
return;
}
//隐藏之前界面
if (hidePrev && panelStacks.Coun > 0)
{
panelStacks[panelStacks.Count - 1].HidePanel();
}
//入栈
panelStacks.Add(panel);

}
private void PopPanel(Panel panel, bool showPrev = true)
{
if (panel == null)
{
return;
}

if (panelStacks.Count > 0)
{
//出栈
panelStacks.RemoveAt(panelStacks.Count - 1);
//恢复之前界面
if(showPrev && panelStacks.Count > 0)
{
panelStacks[panelStacks.Count - 1].ShowPanel();
}
}
}

出现的问题:
假设已经打开了界面A。此时记录的信息为{A(show)}

打开界面B,设置隐藏上个界面。此时记录的信息为{A(hide), B(show)}

此时,再打开界面C,不设定隐藏上个界面。此时记录的信息为{A(hide), B(show), C(show)}

设定界面C的层级在B的下面,所以,玩家看到的界面还是界面B,而实际存放的栈顶是界面C。

将界面B关掉。此时记录的信息为{A(hide), B(show)}

将界面C关掉。此时记录的信息为{A(hide)}

可以看到,此时还存留一个隐藏的界面A。无法被正常的关闭。

解决方案:

1)打开界面,不能简单以时间为顺序进行入栈,还应该判断对应的层级关系。

2)关闭界面时,不能单纯以栈顶进行索引,最
975a
好以名称进行索引,才不会出现顺序错乱。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐