首页 > 其他分享 >cocos creator教程:框架 - UI 框架

cocos creator教程:框架 - UI 框架

时间:2023-01-18 01:55:12浏览次数:46  
标签:cocos 层级 框架 init UI 模块 open 节点

【muzzik 教程】:框架 - UI 框架

实现功能

  • 层级管理

  • 生命周期管理

  • 视图基类

    • 编辑器配置窗口动画
    • 视图数据自动重置
    • 资源计数半自动管理
  • UI 管理器

    • 对象池管理
    • UI 栈
    • UI 独立展示
    • 获取所有/指定 UI
    • 等待 UI 加载
    • 支持单组件多预制体类型

每个功能介绍放在一起篇幅太大,以下依次讲解

层级管理

对于同级节点间的层级管理,分为以下几种类型,层级依次递增

  • 内容:默认的展示层级类型

  • 窗口

  • 提示

  • 引导

  • 警告

  • 加载

层级类型之间都需要一定的间隔,用于同类型层级之间的控制

分成固定的几个类型的话我们不需要去在场景里面建空节点来做层级控制,但是要注意必须支持扩展

实现功能

  • 编辑器环境层级类型选择

定义类型枚举,通过 cc.CCClass.Attr.setClassAttr 动态修改编辑器属性类型

  • 编辑器环境层级设置

不同类型的游戏层级间隔也不同,比如清明上河图起码定个 1000,默认使用 100 就够了

  • 可动态修改层级类型及间隔大小

增加静态 init 接口,内部刷新编辑器

  • 运行环境可修改层级类型/层级需实时生效

使用 priority 实现,不过 3.6 以上有 Bug,废弃这接口的看得出来是从没做过游戏的引擎开发

生命周期管理

为什么需要生命周期管理?因为我们需要重复利用 UI 节点,所以原本 onl oad,onDestroy 用处就不大了

那么生命周期函数我们该定义什么?看下面

/**
 * - 静态模块:onLoad 时调用
 * - 动态模块:addChild 后调用
 * - 可在此处初始化视图状态
 */
create?(): void | Promise<void>;

/**
 * 初始化
 * - 静态模块:外部自行调用,常用于更新 item 或者静态模块
 * - 动态模块:onLoad 后,open 前调用
 * - 所有依赖 init_data 初始化的逻辑都应在此进行
 */
// @ts-ignore
init(init_?: typeof this.init_data): void | Promise<void>;

/**
 * 打开
 * - init 后执行,在此处执行无需 init_data 支持的模块初始化操作
 */
open?(): void | Promise<void>;

/**
 * 关闭
 * - 由 ui_manage 启动
 */
close?(): void | Promise<void>;

注解

  • 动态模块:动态加载的模块

  • 静态模块:非动态加载的模块动态加载模块的子模块

调用顺序

节点树:

  • 节点1
    • 节点2

open 执行流程:

  1. 节点2 -> open
  2. 节点1 -> open

close 执行流程:

  1. 节点1 -> close
  2. 节点2 -> close

因为父模块需依赖子模块数据,所以子 open 在先,父 close 在先


// ...

视图基类

编辑器配置窗口动画

视图数据自动重置

资源计数半自动管理

标签:cocos,层级,框架,init,UI,模块,open,节点
From: https://www.cnblogs.com/muzzik/p/17059032.html

相关文章

  • Java | Spring Boot统一日志框架
    在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析。在Java领域里存在着多种日志框架,如JCL、SLF4J、Jboss-logging、jUL、log4j、log......
  • [ROC-RK3568-PC] 手把手教你编译Linux_SDK并打包Buildroot系统固件
    ✏️ROC-RK3568-PC入门篇连载进程:✅​​[ROC-RK3568-PC]手把手教你把出厂的Android系统烧写为Ubuntu系统​​✅​​​[ROC-RK3568-PC]手把手教你制作Ubuntu系统TF卡启动......
  • laravel 写function builder where 条件
    if(isset($data['txnTimeStart'])&&!empty($data['txnTimeStart'])){//['r.txnTime','>=',$data['txnTimeStart']];$where[]=[function(......
  • Arduino之读取温度传感器并串口显示
    温度是我们经常接触到的物理量,能够被我们所直观的感受得到,例如天气凉了需要增添衣物,吃的食物太烫需要吹一吹,同时也需要对温度精确的测量,例如人类的正常体温是37.5℃,一个大气......
  • VUE3企业级项目基础框架搭建流程(3)
    VUE-Routernpminstallvue-router@4安装完成后,在项目目录里新建一个router文件,我这里的用的是typeScript,所以建立的是router.ts,该文件是所有视图组件的映射。一般我......
  • 【终极UI/UX工具包】上海道宁与Infragistics助力您简化程序开发,​创建精美应用程序
      InfragisticsUltimate是开发者的UI/UX工具包可以简化程序开发加速从设计到代码的应用程序创建为Web、移动和桌面创建精美应用程序所需的一切帮助 ......
  • UI自动化Selenium的使用--Java语言
    1.Selenium的运行环境依赖于Java环境,Java环境分JDK和JRE,JDK就是JavaDevelopmentKit。简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境。JRE是Java......
  • Jmeter如何使用jp@gc - WebDriver Sampler做功能GUI自动化测试
    随着Jmeter的版本不断迭代更新,尤其是其插件。Jmeter不仅可以完成性能测试、接口测试,而且可以依靠jp@gc-WebDriverSampler来完成GUI的功能自动化测试了。1.jmeter的安装......
  • StringBuilder类
    StringBuilder类/*StringBuilder是一个可变的字符串类,我们可以把它看作一个容器,可变是指它对象中的内容是可变的.String中的内容是不可变的.StringBuilder中的......
  • 使用StringBuilder拼接字符串
    使用StringBuilder拼接字符串/*StringBuilder比String来拼接字符串效率高!@#$需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在......