CocosCreator3.8研究笔记(十六)CocosCreator 2D对象

news2025/5/23 21:36:13

CocosCreator 中,不涉及模型的图片渲染体统称为 2D 渲染对象。


所有的 2D渲染对象需在 RenderRoot 节点下(带有 RenderRoot2D 组件的节点)才可以被渲染,由于 Canvas 组件本身继承 RenderRoot2D 组件,所以 Canvas 组件一般作为数据收集的入口。


2D 对象大致可以分为两类,2D 渲染对象用户界面 User-interface(UI)


区别在于 2D 渲染对象一般只负责将 2D 对象渲染出来,而 UI 则更多的承担着用户交互的能力。


一、2D 渲染组件

本身拥有渲染能力的组件我们称为 2D 渲染组件。

常用的 2D 渲染组件:Sprite 组件、Label 组件、Mask 组件、Graphics 组件、RichText 组件、UIStaticBatch 组件、Spine骨骼动画。


1、Sprite 组件

Sprite(精灵)是 2D 游戏最常见的显示图像的方式,在节点上添加 Sprite 组件,就可以在场景中显示项目资源中的图片。


(1)、Sprite 属性

属性功能说明
Type渲染模式,包括普通(Simple)、九宫格(Sliced)、平铺(Tiled)和填充(Filled)四种模式,详情请参考下文 渲染模式 部分的内容
CustomMaterial自定义材质
Grayscale灰度模式,开启后 Sprite 会使用灰度模式渲染。
Color图片颜色
Sprite AtlasSprite 显示图片资源所属的图集
Sprite Frame渲染 Sprite 使用的 SpriteFrame 图片资源
Size Mode指定 Sprite 的尺寸 Trimmed 表示会使用原始图片资源裁剪透明像素后的尺寸 Raw 表示会使用原始图片未经裁剪的尺寸 Custom 表示会使用自定义尺寸。当用户手动修改过 Size 属性后,Size Mode 会被自动设置为 Custom,除非再次指定为前两种尺寸。
Trim是否渲染原始图像周围的透明像素区域

(2)、渲染模式

  • 普通模式(Simple):根据原始图片资源渲染 Sprite,在这个模式下,我们一般不会手动修改节点的尺寸,保证场景中显示的图像和原始图片比例一致。

  • 九宫格模式(Sliced):图像将被分割成九宫格,并按照一定规则进行缩放以适应可随意设置的尺寸(size)。通常用于 UI 元素,或将可以无限放大而不影响图像质量的图片制作成九宫格图来节省游戏资源空间。

  • 平铺模式(Tiled):当 Sprite 的尺寸增大时,图像不会被拉伸,而是会按照原始图片的大小不断重复,就像平铺瓦片一样将原始图片铺满整个 Sprite 规定的大小。

  • 填充模式(Filled):根据原点和填充模式的设置,按照一定的方向和比例绘制原始图片的一部分。经常用于进度条的动态展示。

填充模式(Filled)

Type 属性选择填充模式后,会出现一组新的属性可供配置:

属性功能说明
Fill Type填充类型选择,有 HORIZONTAL(横向填充)、VERTICAL(纵向填充)和 RADIAL(扇形填充)三种。
Fill Start填充起始位置的标准化数值(从 0 ~ 1,表示填充总量的百分比),选择横向填充时,Fill Start 设为 0,就会从图像最左边开始填充
Fill Range填充范围的标准化数值(同样从 0 ~ 1),设为 1,就会填充最多整个原始图像的范围。
Fill Center填充中心点,该属性只有选择了 RADIAL 填充类型才能修改。决定了扇形填充时会环绕 Sprite 上的哪个点。

填充模式注意事项:

  • HORIZONTALVERTICAL 这两种填充类型下,Fill Start 设置的数值将影响填充总量,如果 Fill Start 设为 0.5,那么即使 Fill Range 设为 1.0,实际填充的范围也仍然只有 Sprite 总大小的一半。


  • RADIAL 类型中 Fill Start 只决定开始填充的方向,Fill Start 为 0 时,从 x 轴正方向开始填充。Fill Range 决定填充总量,值为 1 时将填充整个圆形。Fill Range 为正值时逆时针填充,为负值时顺时针填充。


2、Label 组件


Label 组件用来显示一段文字,文字可以是系统字体,TrueType 字体、BMFont 字体或艺术数字。


(1)、Label 属性

属性功能说明
CustomMaterial自定义材质
Color文字颜色
String文本内容字符串
HorizontalAlign文本的水平对齐方式。可选值有 LEFT、CENTER 和 RIGHT
VerticalAlign文本的垂直对齐方式。可选值有 TOP、CENTER 和 BOTTOM
FontSize文本字体大小
FontFamily文字字体名字,在使用系统字体时生效
LineHeight文本的行高
Overflow文本的排版方式,目前支持 CLAMP、SHRINK 和 RESIZE_HEIGHT
EnableWrapText是否开启文本换行(在排版方式设为 CLAMP、SHRINK 时生效)
Font指定文本渲染需要的字体资源
UseSystemFont布尔值,是否使用系统字体
CacheMode文本缓存类型,仅对 系统字体TTF 字体有效,BMFont 字体无需进行这个优化。包括 NONEBITMAPCHAR 三种模式
IsBold文字是否加粗,支持系统字体以及部分 TTF 字体
IsItalic文字是否倾斜,支持系统字体以及 TTF 字体
IsUnderline文字是否加下划线,支持系统字以及 TTF 字体

(2)、Label 排版

属性功能说明
CLAMP文字尺寸不会根据 Content Size 的大小进行缩放。 Wrap Text 关闭的情况下,按照正常文字排列,超出 Content Size 的部分将不会显示。 Wrap Text 开启的情况下,会试图将本行超出范围的文字换行到下一行。如果纵向空间也不够时,也会隐藏无法完整显示的文字。
SHRINK文字尺寸会根据 Content Size 大小进行自动缩放(不会自动放大,最大显示 Font Size 规定的尺寸)。 Wrap Text 开启时,当宽度不足时会优先将文字换到下一行,如果换行后还无法完整显示,则会将文字进行自动适配 Content Size 的大小。 Wrap Text 关闭时,则直接按照当前文字进行排版,如果超出边界则会进行自动缩放。
RESIZE_HEIGHT文本的 Content Size 会根据文字排版进行适配,这个状态下用户无法手动修改文本的高度,文本的高度由内部算法自动计算出来。

3、Mask 遮罩组件

Mask 用于规定子节点可渲染的范围,默认带有 Mask 组件的节点会使用该节点的约束框(也就是 属性检查器 中 Node 组件的 ContentSize 规定的范围)创建一个矩形渲染遮罩,该节点的所有子节点都会依据这个遮罩进行裁剪,遮罩范围外的将不会渲染。


(1)、Mask 属性

属性功能说明
Type遮罩类型,包括 GRAPHICS_RECTGRAPHICS_ELLIPSEGRAPHICS_STENCILSPRITE_STENCIL 四种类型
Segments椭圆遮罩的曲线细分数,只在遮罩类型设为 ELLIPSE 时生效
Inverted反向遮罩

(2)、Type 类型

  • GRAPHICS_RECT 矩形遮罩

在这里插入图片描述


  • GRAPHICS_ELLIPSE 圆形遮罩

在这里插入图片描述


也可动态设置GRAPHICS_ELLIPSE:

const mask = this.getComponent(Mask);
mask.type = Mask.Type.ELLIPSE;
mask.segments = 32;
  • GRAPHICS_STENCIL 自定义图形遮罩

在这里插入图片描述


代码动态设置GRAPHICS_ELLIPSE:

const g = this.mask.node.getComponent(Graphics);
g.lineWidth = 10;
g.fillColor.fromHEX('#ff0000');
g.moveTo(-10, 0);
g.lineTo(0, -20);
g.lineTo(30, 0);
g.lineTo(0, 40);
g.close();
g.stroke();
g.fill();

  • SPRITE_STENCIL 自定义图片遮罩

在这里插入图片描述


const mask = this.getComponent(Mask);
mask.type = Mask.Type.SPRITE_STENCIL;
const sprite = this.getComponent(Sprite);
sprite.spriteFrame = this.stencilSprite;
mask.alphaThreshold = 0.1;

(3)、Mask 遮罩使用注意事项

  • 节点添加了 Mask 组件之后,所有在该节点下的子节点,在渲染的时候都会受 Mask 影响。
  • GRAPHICS_STENCIL 类型在这里没有做任何引擎需要的事,只是放开了对 graphics 操控,用户可以使用 mask 组件里的 graphics 属性来绘制自定义图形,但是节点的点击事件还是根据节点的尺寸来计算。
  • SPRITE_STENCIL 类型默认需要一个图片资源,如果没有设置的话,相当于没有遮罩。

4、Graphics 组件

Graphics 组件提供了一系列绘画接口:

方法功能说明
moveTo (x, y)把路径移动到画布中的指定点,不创建线条
lineTo (x, y)添加一个新点,然后在画布中创建从该点到最后指定点的线条
bezierCurveTo (c1x, c1y, c2x, c2y, x, y)创建三次方贝塞尔曲线
quadraticCurveTo (cx, cy, x, y)创建二次贝塞尔曲线
arc (cx, cy, r, startAngle, endAngle, counterclockwise)创建弧/曲线(用于创建圆形或部分圆)
ellipse (cx, cy, rx, ry)创建椭圆
circle (cx, cy, r)创建圆形
rect (x, y, w, h)创建矩形
close ()创建从当前点回到起始点的路径
stroke ()绘制已定义的路径
fill ()填充当前绘图(路径)
clear ()清除所有路径

(1)、Graphics 组件属性

属性功能说明
CustomMaterial自定义材质,可用于实现溶解、外发光等渲染效果。
LineWidth设置或返回当前的线条宽度
LineJoin设置或返回两条线相交时,所创建的拐角类型
LineCap设置或返回线条的结束端点样式
StrokeColor设置或返回笔触的颜色
FillColor设置或返回填充绘画的颜色
MiterLimit设置或返回最大斜接长度

(2)、绘图方法演示

import { _decorator, Component, Graphics } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('Test')
export class Test extends Component {
    start () {
        const g = this.getComponent(Graphics);
        g.lineWidth = 1;
        g.fillColor.fromHEX('#ff0000');
        g.moveTo(-20, 0);
        g.lineTo(0, -60);
        g.lineTo(20, 0);
        g.lineTo(0, 60);
        g.close();
        g.stroke();
        g.fill();
    }
}

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

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

相关文章

分享一个基于微信小程序的汽车租赁小程序 车辆出租小程序 汽车租借小程序源码 lw 调试

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

typescript环境搭建,及tsc命令优化

typescript typescript. 是一种由微软开发的 开源 、跨平台的编程语言。. 它是 JavaScript 的超集,最终会被编译为JavaScript代码。. TypeScript添加了可选的静态类型系统、很多尚未正式发布的ECMAScript新特性(如装饰器 [1] )。. 2012年10月…

华为HCIA(三)

链路本地地址接口标识64bit 当STP端口到了Forwarding状态后,会转发流量,也处理报文 在TCP/IP模型中,会话层,表示层和应用层,都规划成了应用层 路由表包含目的地址和掩码,优先级,cost,下一跳和…

2023/09/14 qtc++

仿照vector手动实现自己的myVector部分功能&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std; template <typename V> class myVector { private:V *data; //存放数据int size; //数组长度int capacity; //容量大小 public:m…

项目实战— pytorch搭建CNN处理MNIST数据集

项目文件夹介绍 项目文件夹 CNN_MNIST_practice文件夹是整个项目的文件夹&#xff0c;里面存放了六个子文件夹以及四个 .py 程序&#xff0c;接下来我们分别来介绍这些文件的内容。 其中 minist_all_CPU.py 是CPU版本的模型训练&#xff0b;测试程序&#xff0c;而 min…

Mongodb+NodeJS实现服务端架构

一、前言 使用Mogodb和Nodejs完成简单的服务端架构&#xff0c;读完此文章后你会学到&#xff1a;1. 如何安装Mongodb2. Mongodb命令行3. Mongodb的图形化工具Robomongo的使用4. 如何使用NodeJS指挥Mongodb二、安装Mongodb 1、Mongodb简介 官网: https://www.mongodb.com/源于…

2023最实用的订单管理软件有哪些?推荐这5款

订单管理软件是基于互联网技术和数据管理的信息化平台&#xff0c;用于维护和管理订单整个生命周期的系统&#xff0c;包括订单创建、订单修改、订单查询、订单管理、订单发货等一系列流程。 实用的订单管理软件&#xff0c;要具备基础功能的订单管理功能&#xff0c;包含订单…

Python中高效的爬虫框架

大家好&#xff0c;我是涛哥。 在信息时代&#xff0c;数据是无价之宝。许多开发者和数据分析师需要从互联网上采集大量的数据&#xff0c;用于各种用途&#xff0c;如分析、建模、可视化等。Python作为一门强大的编程语言&#xff0c;提供了多种高效的爬虫框架&#xff0c;使…

vue echarts条形统计图每个条上部分加数字

series: [{name: "",type: "bar",barGap: "-100%",//两条线可以重合在一起barWidth: 25,itemStyle: {normal: {label:{//在normal中放lable字段show:true,position: top,color:"#c3cbde",formatter:(params)>{//核心部分 formatter…

LeetCode 热题 100(八):贪心。121. 买卖股票的最佳时机、45. 跳跃游戏 II

题目一&#xff1a; 121. 买卖股票的最佳时机https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 思路&#xff1a;因为时间复杂度O&#xff08;n&#xff09;&#xff0c;所以使用贪心来做。类似双指针&#xff0c;一个指针记录到当前循环时最小的股票价格&…

企业高效管理多个微信账号的软件

在现代社交媒体的时代&#xff0c;微信已经成为了人们交流、工作的重要工具之一。然而&#xff0c;对于一些企业来说&#xff0c;管理多个微信账号却是一项令人头疼的任务。好在&#xff0c;现在有了一款强大的软件&#xff0c;能够帮助企业高效地管理各个微信账号&#xff0c;…

js基础总结

js基础总结 ajax的post请求中&#xff0c;报错&#xff1a;Content type application/x-www-form-urlencoded;charsetUTF-8 not supported"数组和对象获取值的方式正则去掉特殊字符&#xff1a;【&#xff0c;】&#xff0c;“&#xff0c;”等&#xff0c;可同时处理多个…

投资理财基础知识分享(三)

大家好&#xff0c;我是财富智星&#xff0c;今天跟继续跟大家分享投资理财基础知识&#xff0c;买理财&#xff0c;何时买&#xff0c;何时卖的问题。 一、何时买&#xff1f; 在投资中&#xff0c;决定何时买入资产对于理财新手来说并不是一个应该花费过多精力的问题&#xf…

跟模型和中间层聊聊:什么是最好的AI原生应用?

软件 2.0 注定会发生&#xff1a;所有软件都值得用神经网络重做一遍。 这个 OpenAI 大神 Karpathy 多年前的预言&#xff0c;指向了今天 LLM 应用层的一个关键问题——如何基于 LLM 能力&#xff0c;设计好 AI 原生应用。 我们看到&#xff0c;应用层的创业者们感到悲观、质疑和…

WebDAV之π-Disk派盘 + 网盘精灵

网盘精灵是一款让您的iPhone、iPod和iPad变成WebDAV客户端的软件。它提供了以下功能: 1、WebDAV操作:网盘精灵支持通过WebDAV协议连接到服务器,进行文件的上传、下载和管理操作。您可以使用它连接到WebDAV服务器,方便地进行文件的传输和管理。 2、文件共享:通过网盘精灵…

改造el-dropdown ,实现多选效果,且当选项只剩下一个时,不允许取消

实现效果 实现代码 其中virtual-list是使用的插件,使得下拉数据多的时候,不会出现卡顿 正常不使用虚拟列表的时候可以这样写 <el-dropdown-menu slot"dropdown"><el-dropdown-item v-for"i in item.optionList" :key"i.id" :command&…

面试中常见的算法题和其python实现

在面试中&#xff0c;常见的算法题包括排序算法、查找算法、动态规划、贪心算法等。以下是一些常见算法题及其Python实现示例&#xff1a; 1. 快速排序&#xff08;Quick Sort&#xff09;&#xff1a; 题目描述&#xff1a;给定一个数组&#xff0c;使用快速排序算法对数组进…

亚马逊测评自养号成号率的关键因素及风控策略探讨

什么决定了自养号的成号率&#xff1f;这是测评团队最关心的问题之一 在测评自养号的过程中&#xff0c;除了需要在远程终端建立防火墙来做防关联和指纹浏览器外&#xff0c;干净的国外IP也是至关重要的 IP地址是互联网协议地址的缩写&#xff0c;为每个网络和主机分配一个逻…

WebGL模型视图投影矩阵

WebGL透视投影_山楂树の的博客-CSDN博客中的PerspectiveView代码一个问题是&#xff0c;我们用了一大段枯燥的代码来定义所有顶点和颜色的数据。示例中只有6个三角形&#xff0c;我们还可以手动管理这些数据&#xff0c;但是如果三角形的数量进一步增加的话&#xff0c;那可真就…

如何评估RPA需求?

在当今数字化的商业环境中&#xff0c;RPA&#xff08;Robotic Process Automation&#xff0c;即机器人流程自动化&#xff09;的需求日益增长&#xff0c;因为它能够帮助企业提高效率、减少错误、节省成本&#xff0c;以及提高员工满意度。然而&#xff0c;尽管RPA的潜力巨大…