尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Oops Framework MVVM数据绑定:数据一变界面自动刷新,你该怎么实现

Oops Framework MVVM数据绑定:数据一变界面自动刷新,你该怎么实现 Oops Framework MVVM数据绑定数据一变界面自动刷新你该怎么实现【免费下载链接】oops-framework基于 Cocos Creator 3.x 版本开发的游戏框架此项目为 Oops Framework 教程项目如果使用框架制作游戏项目可下载 oops-game-kit 游戏项目模板开发。项目地址: https://gitcode.com/gh_mirrors/oo/oops-frameworkOops Framework 是一款基于 Cocos Creator 3.x 开发的游戏框架本教程项目演示了如何用MVVM 数据绑定让界面自动刷新只要 Model 层的数据一变UI 立刻同步更新全程不用写一行手动刷界面的代码。本文以角色属性显示为例带你 4 步实现完整的数据绑定流程。为什么游戏界面需要 MVVM 数据绑定用 Cocos Creator 做界面时大家最常头疼的是数据变了还得手动找到对应的 Label 或进度条去更新数值。界面一多漏更新、错更新就成了维护噩梦。MVVM 的思路正好反了过来界面只负责读数据不关心数据是谁改的。你只管把数据写进视图模型ViewModel简称 VM界面刷新由框架自动完成。Oops Framework MVVM 三层结构各自放在哪里在 Oops Framework 中M、VM、V 各有明确的分工层级职责项目中的位置MModel持有真实数据assets/script/game/role/model/目录VMViewModel提供给界面展示的数据Model 组件内部的vm字段VView负责界面显示assets/script/game/role/view/目录关键设计在于每个 Model 数据组件基于ecs.Comp内部都持有一个vm对象界面只从vm读取数据与 Model 的内部结构完全解耦。在 Cocos 编辑器中右键即可快速搭建一个标准 MVVM 模块模板菜单里已经分好 Model、View、VM 文件填上数据就能用四步实现 MVVM 数据绑定第一步Model 定义数据setter 里写入 vm以角色基础属性组件assets/script/game/role/model/RoleModelBaseComp.ts为例力量属性的写法是public set power(value: number) { this._power value; this.vm[RoleAttributeType.power] value; // 关键一行同步写入 VM }只要想让界面上的字段自动刷新setter 里必须把值同步写进this.vm[...]。这就是数据一变界面自动刷新的前提。第二步VM.add 全局注册数据数据准备好之后比如从服务器拉回角色属性调用VM.add注册这个vm对象VM.add(this.vm, RoleBase); // 注册名称供界面查找 VM.remove(RoleBase); // 用完释放项目里网络数据模块assets/script/game/account/bll/AccountNetData.ts会在收到服务器数据后统一调用各 Model 组件的vmAdd()完成注册——数据一到界面立即可读。第三步View 上挂 VM 组件绑定字段在 UI 预制体中给持有 Label 的节点挂上 VM 组件并指向对应的 vm 字段。数据一变文字自动更新不需要任何手动刷新逻辑。第四步界面关闭时释放数据界面关闭或数据失效时记得调用VM.remove(RoleBase)避免下次进入界面时残留旧数据。界面自动刷新的原理数据变更链路界面为什么能自动刷新以角色属性为例属性集合assets/script/game/role/model/attribute/RoleNumericMap.ts中给每个属性都挂了一个更新回调attr.onUpdate (rn) { this.vm[rn.type] rn.value; // 属性一变自动写入 vm };完整链路是属性变更 → 回调触发 → 写入 vm → VM 组件感知变化 → UI 刷新视图层完全不需要知道是谁改了数据。当玩家在角色信息界面assets/script/game/role/view/RoleViewInfoComp.ts点击升级按钮时业务代码只需写一句role.upgrade()界面上的属性数值就会自动跳变——这就是数据绑定的价值。教程项目内置了一个可运行的 RPG 玩家演示下图即为角色属性显示的界面效果新手避坑清单❌setter 忘了写 vm数据变了界面纹丝不动新手第一大坑❌忘了 VM.addVM 组件找不到数据界面显示空白❌忘了 VM.remove下次进入界面显示上一次的旧数据✅vm 的键名与枚举定义保持一致如RoleAttributeType避免手误拼错导致绑定失效想直接上手体验克隆教程项目即可git clone https://gitcode.com/gh_mirrors/oo/oops-framework用 Cocos Creator 3.x 打开即可运行完整运行效果如下框架插件的安装与更新方式见doc/using.md。项目中等级、属性等完整数据组件都在assets/script/game/role/model/目录下照着上面的模式就能为你自己的游戏界面实现数据一变、界面自动刷新。【免费下载链接】oops-framework基于 Cocos Creator 3.x 版本开发的游戏框架此项目为 Oops Framework 教程项目如果使用框架制作游戏项目可下载 oops-game-kit 游戏项目模板开发。项目地址: https://gitcode.com/gh_mirrors/oo/oops-framework创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表