UI 框架可以很简单,具有打开某些窗口,关闭某些窗口的功能。
也可以很复杂,具有动画效果,层级管理,灰度管理,各种bar配置,链式打开模式,消息窗口 等等。
而作为一个设计人员,最主要的是要使得你的设计已于扩展,留下便于扩展的接口。这里针对我们的游戏UI框架,想到了一些改进,也想到了一些自己在这方面的设计方案。
这里我们要做的UI框架就是比较复杂的游戏UI框架了,能完成的功能主要有
显示某指定的窗口+当前窗口显示的时候的动画效果+层级随意改变+灰度自动化+bar配置+支持链式打开模式+支持消息窗口+支持异步加载以及转圈模式
UIBaseWindow 作为窗口的抽象层,他应该具有如下的功能
>提供上一层ui的id (用于链式加载) preWindowId
>提供灰度值 alpha
>提供深度 depth
>提供显示接口 show
>提供关闭接口 close
>提供销毁接口 release
>提供动画方式 IUIAnimation
>提供bar IUIToolBar
>提供消息接口 OnMsg (主要用于Control层调用UI层)
UIManager 作为窗口的管理器,他应该具有如下的功能
>缓存已经打开了的窗口 Dictionary<WndID, UIBaseWindow> cacheOpenWnd
>显示指定的某个窗口 showWindow(windowid, bAppend),如果bappend = true 则代表了是链式加载。
这个函数流程应该比较多,这里大概理一下
ShowWindow(wndID, bAppend){
判断WndId 是否存在缓存中,如果存在则直接提出来,不存在则从内存中加载
内存中加载了窗口后判断是否已经达到了缓存的窗口上线,如果达到了则清除访问最老的一个
判断是否是链式加载,如果是链式加载,则新加载的窗口的preWindowID = curShowWndID
调整alpha值(根据打开的窗口个数进行灰度自动化,越靠近屏幕的alpha值越大)
调整depth
}
>调整alpha 值
>调整depth 值
IUIAnimation 作为窗口动画的接口存在 主要提供
>动画的开启 Start
>动画的结束 End
>动画结束的回掉
就目前来看的话游戏UI动画主要有这么几类:位置移动型,fade型,Scale型
IUIToolBar 作为窗口的控制器主要提供如下功能
>返回事件 BackEvent
>配置指定的材料以及个数 configItem (大部分是金币,材料等等的配置)
就目前的来说主要有:无toolbar,topBar, leftBar
UIDefine 作为窗口的一些预定义的一些东西
>定义窗口的ID
>定义窗口的ID 对应的prefab path (这里建议定义一套规则,就可以省去了。比如prefab_ui_窗口ID)
基本上的UI框架的想法就是这个样子了~~具体不足后面再补
晚安思密达~~