cocos 常用组件

前面的话

本文将详细介绍 cocos 中的常用组件

Sprite

【概述】

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

cocos 常用组件

点击 属性检查器 下面的 添加组件 按钮,然后从 添加渲染组件 中选择 Sprite,即可添加 Sprite 组件到节点上

【属性】

由上图所示,Sprite组件包含如下属性

Atlas表示Sprite显示图片所属的Atlas图集资源

Sprite Frame 表示Sprite使用的SpriteFrame图片资源

Type 表示渲染模式,Sprite组件支持四种渲染模式

1、普通模式(Simple):该模式为默认值,修改尺寸会整体拉伸图像,适用于序列帧动画和普通图像

2、九宫格(Sliced):修改尺寸时四个角的区域不会拉伸,适用于UI按钮和面板背景

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

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

Size Mode 用来指定Sprite的尺寸模式

1、Trimmed: 该模式为默认值,表示会使用原始图片资源裁剪透明像素后的尺寸

2、Raw: 表示会使用原始图片未经裁剪的尺寸

3、Custom: 表示使用自定义尺寸,当用户手动修改过Size属性后,Size Mode 会被自动设置为 Custom

Trim表示节点约束框内是否包含透明像素区域,勾选此项会去除节点约束框内的透明区域,默认勾选

Src Blend Factor 表示图像混合模式

Dst Blend Factor 表示背景图像混合模式,与上面的属性共同作用,可以将前景和背景Sprite用不同的方式混合渲染

【声明】

cc.Spritecc.SpriteFrame

【使用】

this.node.getComponent(cc.Sprite).spriteFrame = '';

Label

【概述】

Label 组件用来显示一段文字,文字可以是系统字体,TrueType 字体或者 BMFont 字体和艺术数字,另外,Label 还具有排版功能

cocos 常用组件

点击 属性检查器 下面的 添加组件按钮,然后从 添加渲染组件中选择 Label,即可添加 Label 组件到节点上

【属性】

由上图所示,Label 组件包含如下属性

String 表示文本内容字符串

Horizontal Align 表示水平对齐模式,包括Left、Center、Right,默认为left

Vertical Align 表示垂直对齐模式,包括Top、Center、Bottom,默认为top

Font Size 表示字体大小

Line Height 表示行高

Overflow 表示文字排版模式,共4种

1、none: 该模式为默认值

2、clamp: 节点约束框之外的文字会被截断

3、shrink: 自动根据节点约束框缩小文字

4、resize: 根据文本内容自动更新节点的height属性

Font 指定文本渲染需要的字体文件,如果使用系统字体,则此属性可以为空

Font Family 表示字体名称

【声明】

cc.Label

【使用】

this.node.getComponent(cc.Label).string = '';

Spine

【概述】

Spine 组件对骨骼动画(Spine)资源,进行渲染和播放

cocos 常用组件

点击 属性检查器 下方的 添加组件 -> 添加渲染组件 -> Spine Skeleton 按钮,即可添加 Spine 组件到节点上

【属性】

由上图所示,Spine 组件包含如下属性

Skeleton Data 表示骨骼信息数据,是Spine导出后的 .json 文件

Default Skin 表示默认的皮肤,默认值为 default

Animation 表示当前播放的动画名称, 默认值为none

Loop 表示是否循环播放当前动画,默认为true

Premultiplied Alpha 表示图片是否使用预乘,默认为true。当图片的透明区域出现色块时需要关闭该选项,当图片的半透明区域颜色变黑时需要启用该选项

Time Scale 表示当前骨骼中所有动画的时间缩放率,默认为1。值越大,动画速度越快

Debug Slots 表示是否显示图片边框,默认未选中

Debug Bones 表示是否显示骨骼,默认未选中

注意:当使用 Spine 组件时,Node 节点上 Anchor 和 Size 是无效的,该节点的宽高被置成0,且无法修改。所以,如果该节点需要触发点击或其他事件,则需要将该元素包一层父级

【声明】

sp.Skeletonsp.SkeletonData

【使用】

this.node.getComponent(sp.Skeleton).animation = '';

【事件】

this.node.getComponent(sp.Skeleton).setCompleteListener(track => {
    if(!this.node) return;
    if(track.animation.name !== 'play') return;
});

【注意事项】

设置动画的属性,一定要在设置动画名称前设置。比如,循环一定要在动画名称设置前设置

this.birdSkeleton.loop = false;
this.birdSkeleton.animation = '4_3_d_zhengzha';

Button

【概述】

Button 组件可以响应用户的点击操作,当用户点击 Button 时,Button 自身会有状态变化。另外,Button 还可以让用户在完成点击操作后响应一个自定义的行为

cocos 常用组件

点击 属性检查器 下面的 添加组件按钮,然后从 添加 UI 组件中选择 Button,即可添加 Button 组件到节点上

【属性】

由上图所示,Button 组件包含如下属性

Target 表示目标节点,当该节点的状态发生变化时,会相应地修改该节点的 SpriteFrame 或 Color

Interactable 表示是否禁用该按钮,默认选中

enableAutoGrayEffect 当设置为 true 时,如果 button 的 interactable 属性为 false,则 button 的 sprite Target 会使用内置 shader 变灰,默认未选中

Transition 表示按钮状态变化时的过渡类型,共有4种过渡类型

1、None,无过渡,默认值

2、Color,颜色过渡,可设置 Normal、Pressed、Hover、Disabled 这四个状态下的颜色及状态切换的时间间隔 Duration

3、Sprite,图片过渡,可设置 Normal、Pressed、Hover、Disabled 这四个状态下的背景图片

4、Scale,缩放过渡,可设置状态切换的时间间隔 Duration 及用户点击按钮后,按钮的缩放值 ZoomScale

Click Event 表示按钮点击事件的列表,默认为0,表示无点击事件

【声明】

cc.Button

【使用】

this.enterBtn.getComponent(cc.Button).normalSprite = '';
this.enterBtn.getComponent(cc.Button).pressedSprite = '';

注意: 当button组件设置为图片时,需要保留sprite组件,否则图片不显示

Audio

【声明】

在脚本内定义一个 audioClip 资源对象

properties: {
    audio: {
        default: null,
        type: cc.AudioClip
    }
}

【播放】

使用 cc.audioEngine.play(audio, loop, volume); 播放

cc.audioEngine.stop(this.node.audioId);
this.node.audioId = cc.audioEngine.play(this.endAudio, false);

组件destroy时停止播放声音

onDestroy: function () {
    cc.audioEngine.stop(this.node.audioId);
}

【声音回调】

cc.audioEngine.setFinishCallback(this.node.audioId, () => {
    //
});

Schedule

计时器共有如下4个函数

schedule:开始一个计时器
scheduleOnce:开始一个只执行一次的计时器
unschedule:取消一个计时器
unscheduleAllCallbacks:取消这个组件的所有计时器

schedule对应于setInterval,scheduleOnce对应于setTimeout

要特别注意的是,schedule的单位是秒(s),而不是毫秒(ms)

1、简单使用计时器

component.schedule(function() {
     // 这里的 this 指向 component
     this.doSomething();
 }, 5);

上面这个计时器将每隔 5s 执行一次

2、详细使用计时器

// 以秒为单位的时间间隔
 var interval = 5;
 // 重复次数
 var repeat = 3;
 // 开始延时
 var delay = 10;
 component.schedule(function() {
     // 这里的 this 指向 component
     this.doSomething();
 }, interval, repeat, delay);

上面的计时器将在10秒后开始计时,每5秒执行一次回调,重复3次

3、单次计时器

component.scheduleOnce(function() {
     // 这里的 this 指向 component
     this.doSomething();
 }, 2);

上面的计时器将在两秒后执行一次回调函数,之后就停止计时

4、取消计时器

可以使用回调函数本身来取消计时器

this.count = 0;
 this.callback = function () {
     if (this.count === 5) {
         // 在第六次执行回调时取消这个计时器
         this.unschedule(this.callback);
     }
     this.doSomething();
     this.count++;
 }
 component.schedule(this.callback, 1);

注意,组件的计时器调用回调时,会将回调的 this 指定为组件本身,因此回调中可以直接使用 this

Original: https://www.cnblogs.com/xiaohuochai/p/9723911.html
Author: 小火柴的蓝色理想
Title: cocos 常用组件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/545752/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 整理一些Windows桌面运维常用的命令,并且整合成脚本

    github地址:alittlemc/toy 名字叫toy吧,没有啥技术含量,帮不了大忙,但是可以作为在一旁递工具的小弟,还是可减少自己一定的工作量的,毕竟有一些太长的命令也不是很…

    技术杂谈 2023年6月22日
    0107
  • 基于TCP与HTTP的RPC调用的区别

    基于TCP与HTTP的RPC调用的区别 RPC即远程服务调用 出现原因:随着项目越来越大,访问量越来越大,为了突破性能瓶颈,需要将项目拆分成多个部分,这样比起传统的项目都是本地内存…

    技术杂谈 2023年7月11日
    073
  • Docker详解

    Docker简介 【1】Docker是一个开源的容器引擎,它有助于更快地交付应用。 Docker可将应用程序和基础设施层隔离,并且能将基础设施当作程序一样进行管理。使用 Docke…

    技术杂谈 2023年7月24日
    067
  • Searching from end of file using VIM

    My suggestion is to use a range combined with searching backwards via ?. :1?XXXX Overview:…

    技术杂谈 2023年5月31日
    0185
  • DP 优化小技巧

    收录一些比较冷门的 DP 优化方法。 树上依赖性背包形如在树上选出若干个物品做背包问题,满足这些物品连通。由于 01 背包,多重背包和完全背包均可以在 (\mathcal{O}(V…

    技术杂谈 2023年6月21日
    0128
  • 列表初始化

    C++11将列表初始化(大括号初始化)作为一种通用的初始化方式.可用于所有类型. 数组以前就可以用列表初始化,但 C++11 中的列表初始化新增了一些功能: 初始化数组时,可省略等…

    技术杂谈 2023年7月11日
    067
  • 网盘搜索

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月31日
    095
  • java学习之EL和JSTL

    EL和JSTL都是JSP的内容的拓展,都是开发的一些东西,稍微学习记录一下,避免以后忘记 概念:Expression language 表达式语言作用:替换和简化JSP页面中的ja…

    技术杂谈 2023年6月21日
    064
  • C/C++预处理运算符

    有三种运算符只能用在预处理指令中,它们是字符串化运算符#,粘贴运算符##和字符化运算符#@。 字符串化运算符#在宏参数的前面放一个#会使编译器在展开宏时插入参数的名字而不是它的值。…

    技术杂谈 2023年7月24日
    0101
  • 汽车螺丝扭力标准

    汽车螺丝扭力标准如下: 1、支座与车身螺栓(13MM)–25Nm; 2、支座与车身螺栓(18MM)–40Nm+90度/50Nm; 3、支座与发动机支座螺栓(…

    技术杂谈 2023年5月31日
    0122
  • 浅析Promise的设计核心思想及其实现

    前言:这篇文章应该会和你见到的大部分手写Promise文章都不一样,文中不会讲到Promises/A+规范,也不会提到Promise.race / race等语法糖。在本文中,我会…

    技术杂谈 2023年5月31日
    093
  • 不允许脏主选举导致Broker被强制关闭

    https://www.cnblogs.com/wangbin/p/10647997.html https://blog.csdn.net/Alex_Sheng_Sea/artic…

    技术杂谈 2023年5月31日
    088
  • SpringBoot初学入门篇,带你快速上手使用springboot

    SpringBoot框架是每个Java开发人员必须掌握的开发利器。SpringBoot可以快速创建基于Spring的应用。其核心依然是IoC, AOP, 代理,工厂,容器。 动力节…

    技术杂谈 2023年7月25日
    059
  • php使用microtime(true)计算php程序代码执行消耗时间

    http://blog.csdn.net/eflyq/article/details/19130141 Original: https://www.cnblogs.com/52ph…

    技术杂谈 2023年5月31日
    067
  • 大顶堆MaxHeap(原理与Java实现)

    1. 为什么要引入堆? 1.1 堆的应用场景 有时候我们面临一种实际应用场景需要根据任务的重要程度而划分优先级,对优先级高的任务提供优先服务。 优先级队列(Priority Que…

    技术杂谈 2023年7月23日
    073
  • centos 7 快速安装 nload 流量工具

    yum install -y gcc gcc-c++ ncurses-devel make wget wget http://www.roland-riegel.de/nload/…

    技术杂谈 2023年5月30日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球