cocosLua 之 RichText(1)

news2024/10/6 18:22:53

结构

富文本主要通过RichText来实现, 其继承结构:

Node
Ref
ProtectedNode
Widget
LayoutParameterProtocol
RichText

使用RichText主要通过封装的Element元素,进行插入而组合包含文本,图片等效果的富文本。这些元素主要有:

文本
图片
自定义节点
线条
RichElement
Ref
RichElementText
RichElementImage
RichElementCustomNode
RichElementNewLine

使用

在cocos2d-lua项目使用RichText主要通过代码创建,方式一般有两种:

  1. 通过Element元素进行创建

  2. 通过Xml进行创建

常用的一些方法接口有:

  • setVerticalSpace 设置文本垂直间隔
  • setFontSize 设置字体大小, 该接口不会影响到内容自定义的字体大小
  • ignoreContentAdaptWithSize 是否忽略用户自定义组件的大小,true表示忽略
  • formatText 格式文本,会立即调用进行渲染; 注意首先调用该接口才能获取文本的大小高度等

使用Element创建的示例如下:

-- 参考CocosStudioGUITest.lua
self._richText = ccui.RichText:create()
self._richText:ignoreContentAdaptWithSize(false)
self._richText:setContentSize(cc.size(100, 100))

-- 创建文本元素
local re1 = ccui.RichElementText:create(1,cc.c3b(255,255,255),255,"white.","Helvetica",10)
local re2 = ccui.RichElementText:create(2,cc.c3b(255,255,0), 255,"yellow.","Helvetica",10)
local re3 = ccui.RichElementText:create(3,cc.c3b(0,0,255),255,"blue.","Helvetica",10)
local re4 = ccui.RichElementText:create(4,cc.c3b(0,255,0),255,"And green. ","Helvetica",10)
local re5 = ccui.RichElementText:create(5,cc.c3b(255,0,0),255,"red ","Helvetica",10)
-- 创建图片元素
local imgRes = "cocosui/sliderballnormal.png"
local reimg = ccui.RichElementImage:create(6, cc.c3b(255, 255, 255), 255, imgRes)
-- 创建动画元素
local armature = ccs.ArmatureDataManager:getInstance()
armature:addArmatureFileInfo("cocosui/100/100.ExportJson")
local arr = ccs.Armature:create("100")
arr:getAnimation():play("Animation1")
local recustom = ccui.RichElementCustomNode:create(1, cc.c3b(255, 255, 255), 255, arr)

-- 插入元素
self._richText:pushBackElement(re1)
self._richText:insertElement(re2, 1)
self._richText:pushBackElement(re3)
self._richText:pushBackElement(re4)
self._richText:pushBackElement(re5)
self._richText:insertElement(reimg, 2)
self._richText:pushBackElement(recustom)
self._richText:pushBackElement(re6)

self._richText:setPosition(cc.p(widgetSize.width/2, widgetSize.height/2))
self._richText:setLocalZOrder(10)
self._widget:addChild(self._richText)

使用Xml创建指定格式的富文本, 需要设定指定的格式才能构建。

<!-- 字体相关 -->
<font face='#.ttf' size='24' color='#0000ff'>text</font>
<small>text</small>
<big>text</big>
<!-- 下划线 -->
<u>text</u>
<!-- 斜体 -->
<i>text</i>
<!-- 粗体 -->
<b>text</b>
<!-- 中划线 -->
<del>text</del>
<!-- 图片 -->
<img src='cocosui/sliderballnormal.png' width='30' height='30'/>
<!-- 链接 -->
<a href='http://www.google.com'>click me text </a>
<!-- 换行 -->
<br/>
<!-- 描边 需要ttf文件的支持 -->
<outline color='#D2B48C' size='2'>text</outline>
<!-- 阴影 -->
<shadow color='#4169E1' offsetWidth='8' offsetHeight='-8' blurRadius='2'>text</shadow>
<!-- 外发光 需要ttf文件的支持 -->
<glow color='#AFEEEE'>text</glow>

主要接口是:createWithXML

local content = "<font size='20' color='#0000ff'>这是</font>"
		.. "<font size='24' color='#0000ff'>xml富文本</font>"
    .. "<img src='Default/r2.png' width='30' height='30'/>"
    .. "<outline color='#D2B48C' size='4'><font face='fonts/arial.ttf' size='44' color='#FFFFFF'>outline</font></outline>"
    .. "<br/><a href='http://www.google.com'>click me text </a> "

local richText = ccui.RichText:createWithXML(content, {})
if not richText then 
    return 
end 

richText:setAnchorPoint(cc.p(0.5, 0.5))
richText:setPosition(cc.p(display.width*4/5 + 70, display.height/2))
self:addChild(richText)

在程序中使用富文本,如果内容有多行,获取高度的话,主要通过setContentSize/getContentSize

来设定。 其示例:

function RichTextTest:AddRichTextDemo_3() 
    local bgSize = cc.size(300, 100)
    local bgLayout = ccui.Layout:create() 
    -- 设置背景颜色类型: 0.NONE 1.SOLID 2.GRADIENT
    bgLayout:setBackGroundColorType(ccui.LayoutBackGroundColorType.solid)                
    -- 设置背景颜色
    bgLayout:setBackGroundColor(cc.c3b(255, 255, 255))
    -- 设置透明度
    bgLayout:setBackGroundColorOpacity(180)
    bgLayout:setContentSize(bgSize)
    bgLayout:setAnchorPoint(cc.p(0, 1))
    bgLayout:setPosition(cc.p(display.width/2 - bgSize.width/2, display.height/4))
    self:addChild(bgLayout)

    local content = "<font size='20' color='#FFFFFF'>RichText</font>"
  		.. "<font size='24' color='#0000ff'>这是一段分行的富文本内容,这是一段分行的富文本内容,这是一段分行的富文本内容</font>"
    local richText = ccui.RichText:createWithXML(content, {})
    richText:setPosition(cc.p(0, bgSize.height))
    richText:setAnchorPoint(cc.p(0, 1))
    -- 设置文本垂直间隔
    richText:setVerticalSpace(2)
    -- 是否忽略用户自定义组件的大小, true表示忽略
    richText:ignoreContentAdaptWithSize(false)
    -- 设置大小,限定宽度
    richText:setContentSize(cc.size(bgSize.width, 0))
    -- 格式文本,会立即调用进行渲染; 注意首先调用该接口才能获取文本的大小高度等
    richText:formatText() 

    -- 重置大小
    local textSize = richText:getContentSize()
    bgLayout:setContentSize(cc.size(bgSize.width, textSize.height))
    richText:setPosition(cc.p(0, textSize.height))

    bgLayout:addChild(richText)
end 

请添加图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下ds18b20驱动开发获取温度

文章目录 一、修改并且编译设备树&#xff08;1&#xff09;修改设备树&#xff08;2&#xff09;修改开发板设备树进行reboot 二、硬件连接三、驱动开发与测试&#xff08;1&#xff09;编写设备驱动&#xff08;2&#xff09;编写测试代码&#xff08;3&#xff09;Makefile&…

第四章——数学知识1

质数 质数&#xff1a;在大于1的整数中&#xff0c;如果只包含1和本身这俩个约束&#xff0c;就被叫质数或素数。 质数判定试除法 质数的判定——试除法&#xff1a;如果d能整除n&#xff0c;则n/d再除n&#xff0c;结果是一个整数。 d≤n/d。 bool is_prime(int x) {if (x <…

【大数据之Hadoop】二十、Yarn基础框架及工作机制

1、Yarn基础框架 Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。 YARN主要由ResourceManager、NodeManager、ApplicationMaster和…

202303-1 田地丈量

代码 #include<iostream> #include<vector> #include<string> #include<cmath> #include<algorithm> #include<stack> using namespace std; int n, a, b;int main() {cin >> n >> a >> b;int x1, y1, x2, y2;int x, y;…

科学计算NumPy之Ndarray数组对象的创建、切片、索引、修改等操作汇总

NumPy的操作汇总 NumPy概述Ndarray对象基本使用Ndarray的属性Ndarray的类型Ndarray的形状 创建数组创建数组创建全1数组创建全1数组从已有数组创建新数组从现有数组生成创建等差数列数组创建等比数列数组创建等间隔数列数组创建随机数数组创建正态分布创建创建均匀分布 数组切片…

【JUC高并发编程】—— 再见JUC

一、读写锁 读写锁概述 1️⃣ 什么是读写锁&#xff1f; 读写锁是一种多线程同步机制&#xff0c;用于在多线程环境中保护共享资源的访问 与互斥锁不同的是&#xff0c;读写锁允许多个线程同时读取共享资源&#xff0c;但在有线程请求写操作时&#xff0c;必须将其他读写锁…

windows10 ubuntu子系统安装perf工具

文章目录 1&#xff0c;ubuntu子系统中perf工具安装不了1.1&#xff0c;查看perf版本如下所示1.2&#xff0c;网上找不到对应的版本的内核源码&#xff0c;下载别的版本后&#xff0c;编译各种报错 2&#xff0c;百度查到说是WSL1不支持perf2.1&#xff0c;查看WSL版本 2.2&…

MySQ基础知识整合

目录 模糊查询 排序 单行函数 多行函数 分组函数 having 单表查询执行顺序总结 distinct 连接查询 子查询 union limit DQL语句执行顺序 DDL语句 日期化 date和date_format区别 update table 的快速创建以及删除&#xff08;及回滚&#xff09; 约束 事务 …

HTTP基础知识汇总

伴随着云原生(Cloud Native)的兴起&#xff0c;面向服务架构(Service-Oriented Architecture&#xff0c;SOA)、微服务(Microservice)、容器(Container)等相关概念与技术正在逐渐影响CAx(CAD/CAE/CAM)软件的架构设计与开发。 在云原生CAx软件中&#xff0c;首先需要把系统按照…

MySQL锁详解及案例分析

MySQL锁详解及案例分析 一、一条update语句二、MySQL锁介绍三、全局锁全局锁演示1.环境准备2.全局锁演示 四、MySQL表级锁&#xff08;都是Server层实现&#xff09;1、表级锁介绍2、表读S、写锁X1&#xff09;表锁相关命令2&#xff09;表锁演示1、表级的共享锁(读锁)2、表级的…

VLAN实验

SW1 [sw1]int g0/0/2 [sw1-GigabitEthernet0/0/2]dis this interface GigabitEthernet0/0/2 port link-type access port default vlan 2 pc1划分到vlan 2 [sw1-GigabitEthernet0/0/3]dis t…

【C++STL】set

前言 前面的CSTL的博客&#xff0c;我们介绍了string&#xff0c;vector&#xff0c;list&#xff0c;deque&#xff0c;priority_queue还有stack和queue。 这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 而从本节开…

【正点原子STM32精英V2开发板体验】体验LVGL的SD NAND文件系统

目的 验证基于SD NAND卡在正点原子STM32精英V2开发板上的兼容效果 实验材料 正点原子STM32精英V2开发板 TF 卡一片 SD NAND卡一片 实验步骤 1、打开例程【正点原子】精英STM32F103开发板 V2-资料盘(A盘)\4&#xff0c;程序源码\3&#xff0c;扩展例程\4&#xff0c;LVGL…

数据库系统概论(二)关系数据库,SQL概述和数据库安全性

作者的话 前言&#xff1a;总结下知识点&#xff0c;自己偶尔看一看。 目录 一、关系模型概述 1.1关系数据结构及形式化定义 1.1.1域&#xff08;Domain&#xff09; 1.1.2笛卡尔积&#xff08;Cartesian Product&#xff09; 1.1.3关系&#xff08;Relation&#xff09; …

Android之 WebView的使用

一 简介 1.1 WebView是用来展示网页的控件&#xff0c;底层是google的WebKit的引擎。 比起苹果的WebView&#xff0c;webkit一些不足地方&#xff1a; 不能支持word等文件的预览 纯标签加载&#xff0c;并不支持所有标签的加载 不支持文件的下载&#xff0c;图片的放大&#…

MATLAB连续时间信号的实现和时域基本运算(八)更新中...

1、实验目的&#xff1a; 1&#xff09;熟悉常用连续时间信号的实现方法&#xff1b; 2&#xff09;掌握连续时间信号的时域基本运算&#xff1b; 3&#xff09;掌握实现基本函数及其运算的函数的使用方法&#xff1b; 4&#xff09;加深对信号基本运算的理解。 2、实验内容&am…

Python Selenium 关键字驱动

目录 项目目录结构 action目录 config目录 exceptionpictures目录 log目录 testCases目录 testData目录 util目录 总结 之前写过一篇Java版的关键字驱动&#xff0c;现在来写一篇Python版本的&#xff0c;网上好多教程都是虎头蛇尾的不完整~ 说下思路&#xff0c;这边没…

十、ElasticSearch 实战 - 源码运行

一、概述 想深入理解 Elasticsearch&#xff0c;了解其报错机制&#xff0c;并有针对性的调整参数&#xff0c;阅读其源码是很有必要的。此外&#xff0c;了解优秀开源项目的代码架构&#xff0c;能够提高个人的代码架构能力 阅读 Elasticsearch 源码的第一步是搭建调试环境&…

C++的左值引用和右值引用

引用和指针的区别&#xff1f; 引用必须初始化&#xff0c;指针可以不初始化 定义一个指针和引用汇编指令上一样的&#xff0c;引用底层还是指针 引用只有一级引用&#xff0c;没有多级引用&#xff0c;而指针可以有多级指针 定义一个引用变量和指针变量&#xff0c;它们汇…

【c语言】函数指针详解

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…