cocosLua 之文本相关

news2024/11/26 10:42:47

Text

用于创建系统或ttf文本, 类结构:

ProtectedNode
Node
Widget
LayoutParameterProtocol
Text
BlendProtocol

Text因继承于Widget在cocosLua中可使用接口:clone

C++创建接口主要有:

static Text* create();
/*
textContent: 文本内容,可通过setString设置
fontName: 字体文件, 可通过setFontName设置
fontSize: 字体大小, 可通过setFontSize设置
*/
static Text* create(const std::string& textContent,
	const std::string& fontName,
	float fontSize);

cocosLua中的使用用法:

-- 创建ttf文本
local text = ccui.Text:create("content", "fonts/Marker Felt.ttf", 30)
-- 创建system文本
local text = ccui.Text:create("content", "Arial", 20)
-- 设置字体大小
text:setFontSize(30)
-- 设置字体文件
text:setFontName("fonts/Marker.ttf")
-- 获取字体类型(0.SYSTEM 1.TTF)
local fontType = text:getType()
-- 设置文本水平对齐方式(0.LEFT 1.CENTER 2.RIGHT)
text:setTextHorizontalAlignment(1)
-- 设置文本垂直对齐方式(0.TOP 1.CENTER 2.BOTTOM)
tetx:setTextVerticalAlignment(1)
-- 设置文本颜色
text:setTextColor(cc.c3b(255, 255, 255))
-- 获取内容自字符个数
local length = text:getStringLength()
-- 启用阴影
local shadowColor = cc.c4b(255, 0, 0, 255)		-- 阴影颜色,默认黑色
local offset = cc.size(2, -2),								-- 偏移,默认(2, -2)
local blurRadius = 0 													-- 阴影效果的模糊半径, 默认0
text:enableShadow(shadowColor, offset, blurRadius)
-- 启用描边
local outLineColor = cc.c4b(0, 0, 0, 255)			-- 描边颜色
local outLineSize = 1													-- 描边宽度, 默认1
text:enableOutline(outLineColor, outLineSize)

针对于限定宽度的多行文本,获取文本的高度,主要用法:

local content = "..."
local text = ccui.Text:create(content, "Arial", 20)
-- 设置文本大小,不要使用setContnetSize
text:setTextAreaSize(cc.size(300, 0))
-- 获取文本大小, 使用getAutoRenderSize
local textSize = text:getAutoRenderSize()
print("---- 文本高度:", textSize.height)

其完整的多行文本示例:

function TextTest:AddTextDemo() 
    local bgSize = cc.size(300, 100)
    local bgLayout = ccui.Layout:create() 
    bgLayout:setBackGroundColorType(ccui.LayoutBackGroundColorType.solid)                
    bgLayout:setBackGroundColor(cc.c3b(0, 100, 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*3/5))
    self:addChild(bgLayout)

    local content = "Text:文本内容普通文本的内容这是普通文本内容\n普通"
  		.. "文本的内容这是普通\t文本内容普通文本的内容本的内容文本内容普"
			.. "通文本的内容本的内容文本内容普通文本的内容..." 
    local label = ccui.Text:create()
    label:setPosition(cc.p(0, bgSize.height))
    label:setTextColor(cc.c4b(255, 255, 255, 255))
    label:setAnchorPoint(cc.p(0, 1))
    label:setFontSize(24)
    label:setString(content)
    bgLayout:addChild(label)

    label:setTextAreaSize(cc.size(bgSize.width, 0))
    label:setTextHorizontalAlignment(ccui.TextHAlignment.LEFT)
    label:setTextVerticalAlignment(ccui.TextVAlignment.CENTER)

    -- 获取文本大小相关
    local textSize = label:getAutoRenderSize()
    bgLayout:setContentSize(cc.size(bgSize.width, textSize.height))
    label:setPosition(cc.p(0, textSize.height))
end 

效果图:
请添加图片描述


Label

它主要用于渲染文本, 可通过如下方式创建:

  • 使用内置的系统字体创建
  • 使用.fnt字体文件创建,主要接口:createWithBMFont
  • 使用.ttf字体文件创建,主要接口:createWithTTF
  • 使用.plist字体文件创建,主要接口:createWithCharMap

C++继承接口:

Label
Node
LabelProtocol
BlendProtocol

C++提供的创建接口主要有:

static Label* create();
/*
设置
@text 内容
@font 字体文件名,可通过setSystemFontName设定
@fontSize 字体大小, 可通过setSystemFontSize设定
@dimensions 内容大小,可通过setDimensions设定, 默认cc.size(0, 0)
@hAlignment 文本水平对齐方式,可通过setHorizontalAlignment设定
@vAlignment 文本垂直对齐方式,可通过setVerticalAlignment设定

对齐方式也可以通过: setAlignment(hAlignment, vAlignment) 设定
*/
static Label* createWithSystemFont(
  const std::string& text, 														
  const std::string& font,
  float fontSize,
  const Size& dimensions = Size::ZERO,
  TextHAlignment hAlignment = TextHAlignment::LEFT,
	TextVAlignment vAlignment = TextVAlignment::TOP
);

static Label * createWithTTF(
  const std::string& text, 
  const std::string& fontFilePath, 
  float fontSize,
  const Size& dimensions = Size::ZERO, 
  TextHAlignment hAlignment = TextHAlignment::LEFT,
  TextVAlignment vAlignment = TextVAlignment::TOP
);

static Label* createWithTTF(
  const TTFConfig& ttfConfig, 
  const std::string& text, 
  TextHAlignment hAlignment = TextHAlignment::LEFT, 
  int maxLineWidth = 0
);

static Label* createWithBMFont(
  const std::string& bmfontPath,
  const std::string& text,
  const TextHAlignment& hAlignment = TextHAlignment::LEFT, 
  int maxLineWidth = 0,
	const Vec2& imageOffset = Vec2::ZERO
);

static Label * createWithCharMap(const std::string& charMapFile, int itemWidth, int itemHeight, int startCharMap);
static Label * createWithCharMap(Texture2D* texture, int itemWidth, int itemHeight, int startCharMap);
static Label * createWithCharMap(const std::string& plistFile);

cocosLua的创建示例:

-- 使用createWithSystemFont
local label = cc.Label:createWithSystemFont("", "Arial", 32)
-- 使用createWithTTF, ttf字体文件
local label = cc.Label:createWithTTF("", "fonts/Thonburi.ttf", 16)
--[[
使用createWithTTF, ttfConfig, 其常用配置支持:
fontFilePath = ""			-- 字体文件路径
fontSize = 12,				-- 字体大小
underline = false, 		-- 是否支持描边
bold = false,					-- 是否支持加粗
italics = false,			-- 是否支持斜体
outlineSize = 0,			-- 描边大小
]]
local ttfConfig = {}
ttfConfig.fontFilePath = "fonts/arial.ttf"
ttfConfig.fontSize = 40
local label = cc.Label:createWithTTF(ttfConfig, "0%")
-- 使用createWithBMFont
local label = cc.Label:createWithBMFont("fonts/bitmapFontTest2.fnt", "Test")
-- 使用createWithCharMap
local label = cc.Label:createWithCharMap("fonts/tuffy_bold_italic-charmap.plist")

使用示例:

local label = cc.Label:create()
-- 使用字体文件
label:setSystemFontName("***.font")
-- 使用字体大小
label:setSystemFontSize(24)
-- 设置内容
label:setString("")
-- 设置文本对齐方式
label:setAlignment(1, 1)
-- 设置水平对齐
label:setHorizontalAlignment(0)
-- 设置垂直对齐
label:setVerticalAlignment(ccui.TextVAlignment.CENTER)
-- 设置文本处理方式:自动适应、超出区域被裁剪、自动缩放、自动适应高度
label:setOverflow(cc.LabelOverflow.SHRINK)
-- 设置文本行距, 不支持系统字体
label:setLineSpacing(10)
-- 获取内容行数, 判定是否存在换行符,否则默认一行, Label
local numLines = label:getStringNumLines()
-- 获取内容个数长度
local length = label:getStringLength()
-- 设置文本断行,避免换行单词一分为二
label:setLineBreakWithoutSpace(true)
-- 立即更新内容
label:updateContent()

注意Label继承于Node, 是不可用于节点clone的,如果需要clone使用Text即可。

针对于限定宽度的多行文本,获取文本的高度,主要用法:

-- 通过setDimensions设置宽度, 通过getContentSize获取大小
local content = ""
local label = cc.Label:create()
label:setDimensions(300, 0)
label:setString(content)

-- 获取文本大小
local textSize = label:getContentSize()
print("---- 文本高度:", textSize.height)

其完整的多行文本示例:

function TextTest:AddLabelDemo() 
    local bgSize = cc.size(300, 100)
    local bgLayout = ccui.Layout:create() 
    bgLayout:setBackGroundColorType(ccui.LayoutBackGroundColorType.solid)                
    bgLayout:setBackGroundColor(cc.c3b(255, 0, 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/5))
    self:addChild(bgLayout)

    local content = "Label文本内容普通文本的内容这是普通文本内"
  		.. "容\n本内容普通文本的Lable容t文本内容普通文本的Lable容" 
    local label = cc.Label:create()
    label:setPosition(cc.p(0, bgSize.height))
    label:setTextColor(cc.c4b(255, 255, 255, 255))
    label:setAnchorPoint(cc.p(0, 1))
    label:setSystemFontSize(24)
    label:setString(content)
    bgLayout:addChild(label)

    -- 设置文本内容尺寸大小,不要用setContentSize
    label:setDimensions(bgSize.width, 0)
    label:setAlignment(ccui.TextHAlignment.LEFT, ccui.TextVAlignment.CENTER)
    label:setLineBreakWithoutSpace(true)

    -- Label内容大小
    local textSize = label:getContentSize()
    bgLayout:setContentSize(cc.size(bgSize.width, textSize.height))
    label:setPosition(cc.p(0, textSize.height))
end 

请添加图片描述


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

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

相关文章

走进社区客户端测试 | 得物技术

0.引言 社区 C 端质量体系建设思考? 询问一下 ChatGPT 1、关于社区客户端 1.1 社区端上功能 得物首页 搜索、发布、关注流、推荐流、沉浸式单列流、活动 tab、其他二级频道 tab 动态详情页 图文、视频、专栏、点评 私域 个人/他人主页、通讯录好友、微博好友…

不得不用ChatGPT的100个理由……

❝ 最近无论在哪,很多人都在吹ChatGPT无所不能,动不动就是AI要颠覆人类,很多人害怕有一天AI会取代自己,我认为明显是多虑了…… ❝ 当然,也有很多小白试用了ChatGPT之后,并没有感觉到他很强大,主…

车载以太网解决方案

近年来,为了满足智能网联汽车的开发要求,车载以太网技术开始逐渐进入人们的视野。而以太网技术已经成为下一代车载络架构的趋势之一,其发展之迅猛,使得各主机厂纷纷产生了浓厚的兴趣并投入研发。 一 为什么使用车载以太网 | 对高…

什么牌子台灯好用不伤眼睛?盘点国内值得入手的护眼灯

选择一款不伤眼睛的台灯主要看光照柔和、光照范围广,符合标准照度国A或国AA、显色指数Ra90以上、无眩光、RG0无危害蓝光、无可视频闪等,对于现在许多青少年的近视率增加,一旦近视就无法恢复,保护好眼睛,在学习阅读时&a…

SpringBoot使用ElasticSearch

ES官网:https://www.elastic.co/cn/downloads/elasticsearch ES下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch kibana官网:https://www.elastic.co/cn/downloads/kibana kibana下载地址:https://…

小红书笔记发布软件 批量上传视频

百收网SEO短视频矩阵发布丨9平台视频发布助手 软件简述:软件仅支持win系统, 软件使用的是网页版模拟协议软件不绑定电脑,任意换机,不限登录账号数量, 软件支持抖音,快手,视频号,西瓜…

P1034 [NOIP2002 提高组] 矩形覆盖

题目描述 在平面上有 �n 个点,每个点用一对整数坐标表示。例如:当 �4n4 时,44 个点的坐标分另为:�1(1,1)p1​(1,1),�2(2,2)p2​(2,2),�3(3,6)p3​…

设备树总结

设备树的概念: 设备树(Device Tree:DT)是用来描述设备信息的一种树形结构。设备树文件在linux内核启动的时候传递到内核被内核解析。设备树中每一个设备节点中的信息构成了一个属性链表,如果驱动想要使用这个设备信息,只需要在这…

UE4架构初识(五)

UE4仿真引擎学习 一、架构基础 1. GameInstance UE提供的方案是一以贯之的,为我们提供了一个GameInstance类。为了受益于UObject的反射创建能力,直接继承于UObject,这样就可以依据一个Class直接动态创建出来具体的GameInstance子类。 UGam…

Pytest接口自动化测试实战演练

结合单元测试框架pytest数据驱动模型allure 目录 api: 存储测试接口conftest.py :设置前置操作目前前置操作:1、获取token并传入headers,2、获取命令行参数给到环境变量,指定运行环境commmon:存储封装的公共方法connect_mysql.p…

C. Magic Ship(二分 + 前缀和)

Problem - C - Codeforces 你是一艘船的船长。最初你站在一个点(x1,y1)上(很明显,海上的所有位置都可以用笛卡尔平面描述),你想要前往一个点(x2,y2)。 你知道天气预报——长度为n的字符串s,仅由…

实战详解Docker快速搭建部署ELK

一.安装前须知 以下步骤在 VMware 中的 centos 7 中操作,ip 地址为:192.168.161.128; 注意安装的时候最好统一版本,否则后面会出现许多问题,进官网搜索对应镜像,查看 Tags 标签下的版本,目前我…

记一次死锁问题

最近在做一个需求,碰到了死锁的问题,记录下解决问题的过程 背景 这个需求要改动一个接口,我这边称为A接口,原先的逻辑是A接口内部会调用c方法,c方法是一个dubbo方法, 现在需要再A接口里添加调用B方法&…

springcloud之Feign、ribbon设置超时时间和重试机制的总结

目录标题 超时时间ribbon和Feignribbon和Feign默认超时时间关于ribbon和Feign超时时间配置说明 关于hystrix默认超时时间与配置说明 ribbon的重试机制重试的次数hystrix超时时间举个例子 超时时间 feign/ribbon对应的是请求的时间 hystrix对应的是断路器的时间 一般情况下 都是…

【Linux】2. 常见指令

1. 操作系统的定义 在真正了解Linux操作系统之前,我们需要初步明确什么是操作系统 Linux下的基本指令 指令的作用是什么,其实就是相当于Windows的基本操作,Linux操作系统是以命令行显示的,而Windows则是以图形化界面的方式展现…

图像融合方向:《Deep Image Blending》论文理解

《Deep Image Blending》论文理解 论文:《Deep Image Blending》WACV 2020 链接:Deep Image Blending 本文目录 《Deep Image Blending》论文理解论文创新点具体实现思路文中使用的基准方法文章内容解析使用模型整体架构两阶段算法详情第1阶段第2阶段 损…

一款高效、可靠的自动化测试平台,提升效率、降低测试成本

一、开源项目简介 扬帆测试平台是一款高效、可靠的自动化测试平台,旨在帮助团队提升测试效率、降低测试成本。该平台包括用例管理、定时任务、执行记录等功能模块,支持多种类型的测试用例,目前支持API(http和grpc协议)、性能,并且…

轻量级服务器nginx:负载均衡

负载均衡就是让每个设备,以同样的概率,处理用户对于服务器的任务请求,默认采用的负载调度策略就是轮流询问,Nginx作为反向代理服务器安装在服务端,Nginx的功能就是把请求转发给后面的应用服务器. 这里写目录标题 一 负…

差分优化算法——DE

🍎道阻且长,行则将至。🍓 目录 一、DE1.步骤2.特点 二、DE Optimiza1.函数最小值问题2.差分进化算法求解2.Java 实现与结果绘图 一、DE 差分进化算法是一种基于群体智能的优化算法,由Storn和Price于1995年提出,最早用…

vue3+ts开发微信小程序----使用FontAwesome图标的步骤(只适用于面性图标)

vue3ts开发微信小程序----使用FontAwesome图标的步骤(只适用于面性图标) 因为用的vue3ts 但是对于npm引进FontAwesome来说,好像对于小程序不支持,所以用了引入文件的方式。 下载FontAwesome字体,我用的是5版本的。[官方…