游戏中一个简单的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
好以名称进行索引,才不会出现顺序错乱。
同时,在打开某界面的时候,可能将上个界面隐藏,在关闭这个界面的时候,恢复显示上个界面。
大致代码如下:
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
好以名称进行索引,才不会出现顺序错乱。
相关文章推荐
- 用Unity3D想做一个简单的赛车游戏,现在的问题是转弯的时候很容易出现翻车的情况,求解决思路
- 在ScrollView添加一个ListView造成的滚动问题的简单解决办法
- 一个简单的猜谜游戏的代码(高级用户界面制作)
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 由一个简单算法想到的程序员素养问题
- Dos 写的一个简单脚本 + 乱码问题
- 一个简单的问题:在Django中如何将views.py中的变量传递到HTML/JavaScript中?
- 19. 如何使用GameCenter制作一个简单的多人游戏教程:第二部分
- [置顶] unity游戏UI多个弹窗采用列表每次只显示一个
- 一个看似简单却复杂的问题:求两个字符串的 左向右匹配 所有的 最长连续的 公共子字符串( 在每个字符串中先后次序相同的) 序列
- android开发专题系列-一个简单的游戏的设计
- linux中卸载jdk,一个简单问题整了一下午
- 一个简单的gridview+formview查询器,遇到的问题(未完成)
- Android开发-一个简单的五子棋游戏
- 一个简单问题的并行算法
- 一个最简单GAL游戏资源文件黑盒分析(二)
- 问一个简单的问题:ByVal是什么什么?别笑我啊!~~
- ajax简单手写了一个猜拳游戏
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)