已上传到github https://github.com/kirikayakazuto/UIFrameWorld 满意请点个星星 谢谢
简单的UI框架
首先进入我的github中, 下载项目 https://github.com/kirikayakazuto/UIFrameWorld
将其中的UIFrame文件夹导入到你的Cocos creator中
UIFrame的简单介绍
以上七个类
其中BaseUIForm和UIManager是我们的重点内容,
BaseUIForm 中定义了一些方法 状态相关的
UIManager 中的重要方法
打开cocos creator, 新建UIRoot结点 这个结点作为窗体的根结点(名字可以随意取, 但是要在config文件夹中SysDefine进行相应修改)
创建一个同名脚本, 将其挂载到MainPanel上
打开MainPanel.ts文件, 修改其继承类为BaseUIForm
在onload中设置窗体类型
import BaseUIForm from "../UIFrame/BaseUIForm";
import { UIFormShowMode } from "../UIFrame/config/SysDefine";
const {ccclass, property} = cc._decorator;
@ccclass
export default class MainPanel extends BaseUIForm {
onLoad () {
this.CurrentUIType.UIForms_ShowMode = UIFormShowMode.HideOther;
}
}
配置config中的ConfigUIFrame.ts中的UIFormPathConfig的对应路径
最后调用 UIManager的ShowUIForms方法
/**
* 窗口生命周期
*/
public OpenUIForm(uiFormName: string) {
UIManager.GetInstance().ShowUIForms(uiFormName);
}
/**
this.OpenUIForm("MainPanel")
*/
窗体间的消息传递, 为了让两个窗体间的耦合度降低, 我们不直接采取方法调用的方式传递消息, 而是用一个全局唯一的GMessageManager类来处理消息
GMessageManager就是一个增强版的 订阅 - 发布模式 , 普通的订阅 - 发步模式是 :
窗体一订阅一条消息, 窗体二发布一条消息, 如果窗体一订阅了该信息, 那么将消息转发给窗体一
而我们这个对功能进行了一些加强, 就是如果窗体一没有订阅该消息, 将此消息保存在内存中(类似qq的离线消息), 当窗体一某个时候订阅该消息(玩家上线了), 就将该内存中的消息发给窗体一(玩家收到其他人的离线消息), 并将消息清除
/**
* 消息代理类
*/
export default class GMessageManager {
private static _eventMap: {[key: string]: Array} = {};
private static _eventMsg: {[key: string]: any} = {};
public static emit(eventName: string, parameter: any) {
let array = this._eventMap[eventName];
if(array === undefined) { // 没有 人监听
this._eventMsg[eventName] = parameter; // 缓存消息
return ;
}
for(let i=0; i