Lua UI系统框架逻辑详解

UI系统框架一般采用的是MVC框架。每个UI模块可分为View、Ctrl'lo一般采用的是MVC框架。每个UI模块可分为View、Control、Model 。本框架中命名为View、Actions、Model 。本框架中还分出了用于协议通信的Proxy已经处理点击事件响应的Mediator,也只是MVC框架的异变版本

单个UI模块结构入下图:

1、MVC全局数据 View、Actions、Model 的声明

2、MVC全局三个文件

3、MVC全局三个文件是直接在c++里进行加载到虚拟机的。

这里面是做了一些兼容,加载那些老旧的不在现有的MVC框架中的View、Actions、Model文件

4.三个查找配置接口

5、关于三个全局文件的说明

6.关于MVC目录和文件说明

7.入口lua脚本加载

这边通过GlobalMVCHelperCfg表收集所有UI活动的名字

8.一个特定MVC活动AlphaCore"的加载流程

入口脚本示例:

(1)入口点击是要执行函数:Actions.AlphaCore.Entry();但是AlphaCoreAction.lua并没有加载;所以会查询Actions这个table的元表__index,见下图(key=Alpha)

(2)之后对Model.AlphaCore、UI.children.AlphaCore的加载是同样的实现思路

(3)只是在加载UI.children.AlphaCore的时候,会顺便把view对应的ui函数接口一并加载:

(4)Model.Key这个table是在UI关闭的时候会清除掉,下次打开会重新加载

(5)但是有些数据是整个游戏生命周期都要保留的:AlphaCorePersistenceModel.lua里的

Model.CommonModel.AlphaCore,它没有在UI关闭的时候清除,那么需要一直保存的数据就存到这里面:

(6)关于协议处理接口的说明

因为协议处理函数和Actions.AlphaCore不在一起,而是另外声明了一个table:Actions.AlphaCoreProxy,其访问加载思路基本一样:当访问Actions.AlphaCoreProxy的时候会查找Actions的元表,这里会进行字符串匹配"Proxy"来决定加载到AlphaCoreProxy.lua而已:

总结:上面的逻辑思路,使得一个活动除了入口配置和游戏相关之外,其他内容都绝对的解耦合,而且不会因为开启游戏就加载对应lua而占用内存,非常方便

相关推荐
xingpanvip21 小时前
星盘接口开发文档:日运语料接口指南
android·开发语言·前端·css·php·lua
薛定猫AI1 天前
【深度解析】Open Code Skills 工作流:用知识图谱、Spec 驱动与 UI 设计系统提升 AI Coding Agent 生产力
人工智能·ui·知识图谱
ZC跨境爬虫1 天前
跟着 MDN 学 HTML day_7:(进阶文本语义标签全覆盖)
前端·javascript·css·ui·html
ZC跨境爬虫1 天前
跟着 MDN 学 HTML day_6:(HTML文本语义标签全解+lang属性)
前端·ui·html·edge浏览器
Ulyanov1 天前
《现代 Python 桌面应用架构实战:PySide6 + QML 从入门到工程化》:实时时钟与数据驱动 UI —— 从“事件回调”到“状态绑定”的范式跃迁
开发语言·python·qt·ui·架构·交互
qq_452396231 天前
第十五篇:《UI自动化中的稳定性优化:解决flaky tests的七种武器》
运维·ui·自动化
低代码布道师1 天前
赋予数据形态:从 API 到 UI,构建状态驱动的后台页面
ui·nextjs
xingpanvip1 天前
星盘接口开发文档:星相日历接口指南
android·开发语言·前端·css·php·lua
zncxCOS2 天前
【ETestDEV5教程48】UI设计器之UI画布
测试开发·ui·仿真测试·etest·嵌入式系统测试
qcx232 天前
Warp源码深度解析(二):自研GPU UI框架——WarpUI的ECH模式与渲染管线
人工智能·ui·设计模式·rust