CocosCreator3.8研究笔记(二十)CocosCreator UI组件(四)


RichText 组件


RichText 组件是富文本控件,实际是由多个 Label 节点拼装而成,用来显示一段带有不同样式效果的文字,通过BBCode 标签来设置文字的样式。


目前支持的样式有:颜色(color)、字体大小(size)、字体描边(outline)、加粗(b)、斜体(i)、下划线(u)、换行(br)、图片(img)和点击事件(on)。


![在这里插入图片描述](https://img-blog.csdnimg.cn/6ff2fa2410d44a0f8a203598bcbdf470.png#pic_center)

1、RichText 属性

属性功能说明
String富文本的内容字符串,可以在里面使用 BBCode 来指定特定文本的样式
Horizontal Align水平对齐方式
Vertical Align竖直对齐方式
Font Size字体大小,单位是 point(注意:该字段不会影响 BBCode 里面设置的字体大小)
Font富文本定制字体,所有的 label 片段都会使用这个定制的 TTF 字体
Font Family富文本定制系统字体
Use System Font是否使用系统字体
Max Width富文本的最大宽度,传 0 的话意味着必须手动换行
Line Height字体行高,单位是 point
Image Atlas对于 img 标签里面的 src 属性名称,都需要在 imageAtlas 里面找到一个有效的 spriteFrame,否则 img tag 会判定为无效
Handle Touch Event选中此选项后,RichText 将阻止节点边界框中的所有输入事件(鼠标和触摸),从而防止输入事件穿透到底层节点

2、BBCode 标签格式


(1)、基本格式

目前支持的标签类型有:size、color、b、i、u、img 和 on,分别用来定制字体大小、字体颜色、加粗、斜体、下划线、图片和点击事件。

每一个标签都有一个起始标签和一个结束标签,起始标签的名字和属性格式必要符合要求,且全部为小写。

结束标签的名字不做任何检查,只需要满足结束标签的定义即可。


注意:所有的 tag 名称必须是小写,且属性值是用 = 号赋值,如下:

<color=green>test</color>,<size=50>test1</>

(2)、BBCode 支持的标签

名称描述示例注意事项
color指定字体渲染颜色,颜色值可以是内置颜色,比如 white,black 等,也可以使用 16 进制颜色值,比如 #ff0000 表示红色<color=#ff0000>Red Text</color>
size指定字体渲染大小,大小值必须是一个整数<size=30>enlarge me</size>Size 值必须使用等号赋值
outline设置文本的描边颜色和描边宽度<outline color=red width=4>A label with outline</outline>如果你没有指定描边的颜色或者宽度的话,那么默认的颜色是白色 (#ffffff),默认的宽度是 1
b指定使用粗体来渲染<b>This text will be rendered as bold</b>名字必须是小写,且不能写成 bold
i指定使用斜体来渲染<i>This text will be rendered as italic</i>名字必须是小写,且不能写成 italic
u给文本添加下划线<u>This text will have a underline</u>名字必须是小写,且不能写成 underline
on指定一个点击事件处理函数,当点击该 Tag 所在文本内容时,会调用该事件响应函数<on click="handler"> click me! </on>除了 on 标签可以添加 click 属性,color 和 size 标签也可以添加,比如 <size=10 click="handler2">click me</size>
param当点击事件触发时,可以在回调函数的第二个参数获取该数值<on click="handler" param="test"> click me! </on>依赖 click 事件
br插入一个空行<br/>注意<br></br><br> 都是不支持的。
img给富文本添加图文混排功能,img 的 src 属性必须是 ImageAtlas 图集里面的一个有效的 spriteframe 名称<img src='emoji1' click='handler' />注意:只有 <img src='foo' click='bar' /> 这种写法是有效的。如果你指定一张很大的图片,那么该图片创建出来的精灵会被等比缩放,缩放的值等于富文本的行高除以精灵的高度。

(3)、img 标签的可选属性

img 标签类型提供了可选属性,可以使用 widthheight 来指定 SpriteFrame 的大小,允许该图片可以大于或是小于行高(但此设定不会改变行高)。

当改变了 SpriteFrame 的高度或宽度后,或许会需要使用 align 来调整该图片在行中的对齐方式。

属性描述示例注意事项
height指定 SpriteFrame 的渲染高度,大小值必须为整数<img src='foo' height=50 />如果你只使用了高度属性,该 SpriteFrame 会自动计算宽度以保持图片比例
width指定 SpriteFrame 的渲染宽度,大小值必须为整数<img src='foo' width=50 />你可以同时使用高度及宽度属性 <img src='foo' width=20 height=30 />
align指定 SpriteFrame 在行中的对齐方式,值必需为 bottomtopcenter<img src='foo' align=center />预设对齐方式为 bottom

为了支持定制图片排版,还提供了 offset 属性,用于微调 SpriteFrame 在 RichText 中的位置。

设置 offset 时需注意属性值必须为整数。

offset 属性示例描述注意事项
Y<img src='foo' offset=5 />指定 SpriteFrame 的 y 轴加上 5当 offset 只设定一个值的时候,它代表 y 轴的偏移
Y<img src='foo' offset=-5 />指定 SpriteFrame 的 y 轴减少 5你可以设定负整数来减少 y 轴
X, Y<img src='foo' offset=6,-5 />指定 SpriteFrame 的 x 轴加上 6,y 轴减少 5偏移属性的值只能包含 0-9-, 字符

(4)、标签嵌套

标签与标签是支持嵌套的,且嵌套规则跟 HTML 是一样的。比如下面的嵌套标签设置一个文本的渲染大小为 30,且颜色为绿色。

<size=30><color=green>I'm green</color></size>

也可以实现为:

<color=green><size=30>I'm green</size></color>

(5)、文本缓存

对于复杂的富文本,底层可能有十几个 label 节点,drawcall 数量会比较高,引擎为富文本组件提供了 Label 组件的文本缓存类型设置,来适当减少 drawcall 的增加。

一般情况下,不应该在游戏的主循环里面频繁地修改富文本的文本内容,这可能会导致性能比较低。

如果能不使用富文本组件,就尽量使用普通的文本组件,推荐使用 BMFont,因为 BMFont的效率是最高的。

类型功能说明
NONE默认值,对富文本所拆分创建的每个 Label 节点,设置其 CacheMode 为 NONE 类型,即将每个 Label 的整段文本生成一张位图并单独进行渲染。
BITMAP选择后,对富文本所拆分创建的每个 Label 节点,设置其 CacheMode 为 BITMAP 类型,即将每个 Label 的整段文本生成一张位图,并将该位图添加到动态图集中,再依据动态图集进行合并渲染。
CHAR选择后,对富文本所拆分创建的每个 Label 节点,设置其 CacheMode 为 CHAR 类型,即将每个 Label 的文本以“字”为单位缓存到全局共享的位图中,相同字体样式和字号的每个字符将在全局共享一份缓存。

二、RichText 组件的使用

这里以添加事件为例,进行演示:

1、新建任意一个带有 RichText 组件的节点。并创建一个自定义脚本,挂载在 RichText 组件上

这里新建了一个自定义脚本TestRichText.ts。


在这里插入图片描述


2、将如下的代码复制到 RichText 的 String 属性内

<on click="onClicked" param="你好,这是点击事件">Click</on>

在这里插入图片描述


3、复制下面的代码到TestRichText.ts中:

import { _decorator, Component, EventTouch } from 'cc';
const { ccclass, property } = _decorator;@ccclass('TestRictText')
export class TestRictText extends Component {start() {}update(deltaTime: number) {}onClicked(eventTouch:EventTouch, param:string){console.log("onClicked", param);}}

4、编译运行

使用鼠标点击Click文本,可以查看到控制台的输出:

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/141592.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

介绍 Docker 的基本概念和优势V2.0

介绍 Docker 的基本概念和优势V2.0 一、Docker 的基本概念1.1 Docker 是什么&#xff1f;1.2 Docker 的组成部分1.3 Docker 的基本概念 二、Docker 的优势1. 轻量级&#xff1a;2. 可移植性&#xff1a;3. 自包含&#xff1a;4. 隔离性&#xff1a;5. 可扩展性&#xff1a;6. 易…

Vue中前端导出word文件

很多时候在工作中会碰到完全由前端导出word文件的需求&#xff0c;因此特地记录一下比较常用的几种方式。 一、提供一个word模板 该方法提供一个word模板文件&#xff0c;数据通过参数替换的方式传入word文件中&#xff0c;灵活性较差&#xff0c;适用于简单的文件导出。需要…

28 WEB漏洞-XSS跨站之WAF绕过及安全修复

目录 常规WAF绕过思路标签语法替换特殊符号干扰提交方式更改垃圾数据溢出加密解密算法结合其他漏洞绕过 自动化工具说明强大的fuzzing引擎安全修复方案演示案例&#xff1a; 常规WAF绕过思路 标签语法替换 xss的效果可以由多个代码来实现&#xff0c;就类似于我们使用到的其它…

2023-9-25 排队打水

题目链接&#xff1a;排队打水 #include <iostream> #include <algorithm>using namespace std;typedef long long LL;const int N 100010;int n; int t[N];int main() {scanf("%d", &n);for(int i 0; i < n; i ) scanf("%d", &t…

【Java 基础篇】Executors工厂类详解

在多线程编程中&#xff0c;线程池是一项重要的工具&#xff0c;它可以有效地管理和控制线程的生命周期&#xff0c;提高程序的性能和可维护性。Java提供了java.util.concurrent包来支持线程池的创建和管理&#xff0c;而Executors工厂类是其中的一部分&#xff0c;它提供了一些…

基于UDP协议的网络服务器的模拟实现

目录 服务端类UdpServer的模拟实现 服务端类UdpServer的成员变量 服务端类UdpServer的构造函数、初始化函数initServer、析构函数 服务端类UdpServer的start函数 服务端类UdpServer的整体代码&#xff08;即udp_server.h文件的整体代码&#xff09; 基于服务端类UdpServe…

Tomcat中文路径目录

一、问题描述 linux环境下tomcat发布了包含中文名字的页面和文件&#xff0c;浏览器访问报404&#xff0c;非中文页面没有问题&#xff1b;本人为RP设计的原型图发布&#xff0c;其中包含了大量的中文文件和路径 二、解决步骤 第一步&#xff0c;设置tomcat&#xff0c;配置…

vue里使用elementui的级联选择器el-cascader进行懒加载的怎么实现数据回显?

需要实现的懒加载回显效果 比如&#xff1a;后端返回数据 广东省/广州市/天河区 &#xff1a;440000000000/440100000000/440106000000&#xff0c;需要我们自动展开到天河区的下一级&#xff0c;效果如下 代码实现 我的实现思路就是拿到 440000000000/440100000000/44010600…

Java版本企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

JavaScript 基础第三天笔记

JavaScript 基础第三天笔记 if 多分支语句和 switch的区别&#xff1a; 共同点 都能实现多分支选择&#xff0c; 多选1大部分情况下可以互换 区别&#xff1a; switch…case语句通常处理case为比较确定值的情况&#xff0c;而if…else…语句更加灵活&#xff0c;通常用于范围…

[每周一更]-(第64期):Dockerfile构造php定制化镜像

利用php官网镜像php:7.3-fpm&#xff0c;会存在部分插件缺失的情况&#xff0c;自行搭建可适用业务的镜像&#xff0c;才是真理 Dockerhub 上 PHP 官方基础镜像主要分为三个分支&#xff1a; cli: 没有开启 CGI 也就是说不能运行fpm。只可以运行命令行。fpm: 开启了CGI&#x…

PHP后台实现微信小程序登录

微信小程序官方给了十分详细的登陆时序图&#xff0c;当然为了安全着想&#xff0c;应该加上签名加密。 微信小程序端 1).调用wx.login获取 code 。 2).调用wx.getUserInfo获取签名所需的 rawData , signatrue , encryptData 。 3).发起请求将获取的数据发送的后台。 login: …

Spring学习笔记5 GoF之工厂模式

Spring学习笔记4 Bean的作用域_biubiubiu0706的博客-CSDN博客 出了GoF23种设计模式.还有javaee的设计模式(DAO模式,MVC模式) 设计模式:是一种可以被重复利用的解决方案 GoF23种设计模式可分为三大类: 创建型(5个):解决对象创建问题. 单例模式&#xff0c;工厂方法模式&#x…

Windows--Python永久换下载源

1.新建pip文件夹&#xff0c;注意路径 2.在上述文件中&#xff0c;新建文件pip.ini 3.pip.ini记事本打开&#xff0c;输入内容&#xff0c;保存完事。 [global] index-url https://pypi.douban.com/simple

​旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作想象和世界一样宽广

​旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作想象和世界一样宽广

计算机毕业设计 基于微信小程序的校园商铺系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

基于SpringBoot的甘肃非物质文化网站设计与实现

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 商品分类管理 申请信息管理 订单信息管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#x…

lv5 嵌入式开发-6 线程的取消和互斥

目录 1 线程通信 – 互斥 2 互斥锁初始化 – pthread_mutex_init 3 互斥锁销毁 pthread_mutex_destroy 4 申请锁 – pthread_mutex_lock 5 释放锁 – pthread_mutex_unlock 6 读写锁 7 死锁的避免 8 条件变量&#xff08;信号量&#xff09; 9 线程池概念和实现 9.1 …

bean的生命周期

配置生命周期 方法一:在配置文件中配置这些属性 方法二:在类上实现接口 生命周期的具体过程 补充 bean的销毁方法默认是不会触发的 必须手动关闭容器,在虚拟机退出之前(程序执行完虚拟机就退出了) configurablleApplicationContext中才有close这个方法

windows下实现mysql8的主从复制

1、下载mysql8的安装包 MySQL :: Download MySQL Community Server 2、放到指定目录进行解压&#xff0c;更改名称为mysql-8.1.0-winx64-master,并复制一份作为从数据库 3、在bin目录下创建一个my.ini文件 添加如下内容 [mysqld] basedir"D:/soft/mysql/mysql-8.1.0-win…