WebGame中UI的层次管理

当一个游戏逐渐变得庞大的时候,里面的UI层次也会随着变得越来越深
面相应的,由于Flash中存在一个Z序的概念,也就是说在XY的基础上还有一个Z深度,暂且称为深度好了
而一个可视对象的深度值会带来这样的作用,当一个对象容器Container.addChild(childA, childB, childC),这个时候,A在最底层,B在A上面,C在B上面
只要当B有一部分遮住了A,那那一部分就只能看见B的那部分,而A是看不见的,这个应该很好理解
 
有了上面的概念,于是对于层次的引用有有些必要了,因为Flash中的对象是层层嵌套,A包含B,B包含C,C包含D等,但是凡是越后面addChild进容器的,就会在挡在前面的上面
打个比方,A.addChild(B);B.addChild(C);A.addChild(D);
那么D一定在C的上面。
 
人工的定义一些Layer类,主要做用仅仅只是一个容器而已,但是可以把你想要放的东西都放在相应的Layer里面,这样一个层次就出来了,层层之间是不会有交叉的,深度越高的永远是遮挡在深度低的上面。
 
比如我们现在的项目中,在MainGame下面定义了这样几个Layer
LoaderBarLayer --此类是加载条的层,加载条层是最上层的,也就是说当加载的时候会挡住所有的UI
PopupBoxLayer --此类是弹出框的层,弹出框属于模态对话框,也就是只有把对话框关掉才可以进行其他操作,所以此层在加载条层的下面
TipLayer --此类是浮动提示框的层,浮动提示框用于对某一些Button或者是MC进行绑定,当鼠标移动到相应的元件的时候就会出现一个浮动提示框
CurorLayer --此类是鼠标特效层,用于表现一些鼠标特效,比如当鼠标点地图上一个可走区域的时候会表现一种点击的特效,还有射击,水枪等
LoginLayer --此类是登陆层,主要是包含了登陆界面,至于为什么要给登陆单独加一层,原因就是为了速度和垃圾回收,登陆的时候只加载登陆需要的东西,当登陆完后才加载主游戏层,而且登陆过后此层也会被垃圾回收
MainGameLayer --此类是主游戏层,此层相当于一个容器,位于该层下面又有其他层,具体如下
MapLayer --此类是地图层,主要用于包含及显示地图,包含的只是地图这个静态的背景而已
SortableLayer(暂定名) --此类是可排序层,所谓的可排序层是指这个层中的所有东西都有一个共同的父亲,但是它们的深度却是时刻变化的,这是因为场景中人物走动的时候会有这样的需求,当A的Y坐标比B的更大的时候,那么A应该遮在B的上面,反之亦然,这样才会有场景的效果,让玩家感觉更自然
FaceLayer --此类是主界面层,包括了主界面的那些按钮,聊天框等等
WindowLayer --此类是窗口层,当点击FaceLayer上面的那些按钮的时候就会弹出相应的窗口到WindowLayer,用WindowLayer统一管理。

你可能感兴趣的:(game)