# 组件库的介绍

# 全面了解组件库

组件库在 Basics 里,有这样几大类:
组件库

# 2D 基础组件

2D 基础组件比较轻量,但是不能相对布局,可以外部套一层 box 进行布局,它也没有九宫格和数据源。

  • Animation:动画基础组件,动画都是基于这个组件运行的(动画创建、播放、控制等)
  • HTMLDivElement:富文本组件,html 图文类用于显示 html 内容,例如 a 标签(点击后会派发 link 事件)、span、p、div 等等
  • Sprite:精灵,比较底层的显示组件,很多 UI 组件都是继承自它,它本身没有宽高也没有鼠标事件
  • Text:文本组件,用于显示文本,很多 UI 组件自带了 Text

# Filters 滤镜组件

滤镜组件的使用是直接将滤镜拖入到 img 或其他组件里面,在 IDE 就可以修改属性并查看实时效果;滤镜比较耗性能,可以使用美术提供的滤镜效果。

  • BlurFilterSetter:模糊滤镜,让图片产生模糊效果
  • ColorFilterSetter:颜色滤镜,叠加到图片上的颜色
  • GlowFilterSetter:发光滤镜,图片背景的发光效果,也可以制作阴影效果

# Graphics 绘图组件

绘图组件主要分为矢量组件和纹理组件,不建议使用矢量组件(性能不太好也可能因为适配不同产生边缘锯齿),比较建议使用纹理节点(有较好的性能,但是它不能添加子节点,它就是一个图)

  • 矢量组件
    • Circle:圆形
    • Curves:多曲线
    • Line:直线
    • Lines:多段直线
    • Pie:扇形
    • Poly:多边形
    • Rect:矩形
  • 纹理组件
    • FillText:静态文本用 Text 或 Label,动态文本建议使用 FillText;因为动态的文本在使用 Text 会创建新图集比较耗内存,而 FillText 是使用旧图集或一个字一个字提交(创建效率低一些),图集利用率和共享好,但是复杂的“蝌蚪文”不建议使用 FillText(中英文可以),分割时可能会出错。
    • FillTexture:填充纹理,纵横重复显示
    • Texture:纹理,是一个显示图片,在多张图片展示时性能比较好相比于 sprite 或 img

# UI 组件

2D 基础组件不能使用相对布局、九宫格和数据源,但是轻便性能会更好;而 UI 组件可以使用相对布局、九宫格和数据源;
UI 组件都是继承自 sprite,UI 组件主要分为基础组件和容器组件;其实 Sprite 也可以作为容器存放一些内容的。

UI 组件分类与继承关系:

Sprite 显示精灵
    ├──UIComponent UI组件
    │   ├──基础显示组件
    │   │   ├──Button 按钮组件
    │   │   │   ├──CheckBox 多选框组件
    │   │   │   └──Radio 单选框组件
    │   │   ├──Clip 位图切片组件
    │   │   │   └──FontClip 字体切片组件
    │   │   ├──ColorPicker 选色器组件
    │   │   ├──ComboBox 下拉框组件
    │   │   ├──ScrollBar 滚动条组件
    │   │   │   ├──HScrollBar 水平滚动条组件
    │   │   │   └──VScrollBar 垂直滚动条组件
    │   │   ├──Slider 滑动条组件
    │   │   │   ├──HSlider 水平滑动条组件
    │   │   │   └──VSlider 垂直滑动条组件
    │   │   ├──Image 位图组件
    │   │   ├──Label 文本框组件
    │   │   │   └──TextInput 输入框组件
    │   │   │       └──TextArea 文本域组件
    │   │   ├──ProgessBar 进度条组件
    │   │   └──WXOpenDataViewer 微信开放域组件
    │   └──Box 容器组件
    │       ├──Tree 树
    │       ├──LayoutBox 布局器
    │       │   ├──HBox 水平布局器
    │       │   └──VBox 纵向布局器
    │       ├──List 列表
    │       ├──Panel 面板
    │       ├──UIGroup
    │       │   ├──RadioGroup 单选框按钮组
    │       │   └──Tab 标签(页签)
    │       └──ViewStack 页签对应的容器
    └──Scene 场景组件,没有相对布局
        └──View 显示组件,有相对布局
            └──Dialog 弹窗组件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# Common 组件

小游戏使用的组件

# 全面了解组件资源库

资源库

  • 组件都有自己的资源,这些资源在 Assets 里,像引擎自带的在 Assets/comp 里,可以看到他们的命名很规范,遵守命名规范的资源会被引擎识别成对应的组件
基础显示组件名称 组件中文名称 资源前缀(全写,不区分大小写) 资源前缀(缩写,区分大小写)
Label 文本框 label_
TextInput 输入框 textinput_ input_
TextArea 带滚动条的文本域 textarea_ area_
Button 按钮 button_ btn_
CheckBox 多选框 checkbox_ check_
Radio 单选框 radio_
Tab 标签 tab_
RadioGroup 单选框按钮组 radiogroup_
VSlider 垂直滑动条 vslider_
HSlider 水平滑动条 hslider_
Clip 位图切片 clip_
fontclip 字体切片 fontclip_
ProgressBar 进度条 progressbar_ progress_
ComboBox 下拉框 combobox_ combo_
VScrollBar 垂直滚动条 vscrollbar_ vscroll_
HScrollBar 水平滚动条 hscrollbar_ hscroll_
Image 位图 Image_ img_
sprite 精灵 不按组件规则命名的都被视为 sprite
  • 特殊组件会有多个资源,使用$符合来区别不同状态所需要的资源。
  • Assets 资源库也存放游戏项目的资源,要符合命名规则,然后就可以拖拽到场景编辑器里使用了。
  • Assets 资源库里的“组件”可以进行属性的预设(双击),但是这个“组件”肯定是基础显示组件类型的,不会是容器组件类型的。
  • Assets 资源库里面的文件夹可以双击对其设置打包类型,“打包”和“不打包”,意思是不打包成图集直接使用碎图,也可以单独对资源设置打包类型。

# 层级面板节点与节点树

# 层级面板

层级面板

  • 后拖进去的后挡住前面拖进去的(先进去的在底层),会优先看到上层的东西
  • 层级的改变可以通过鼠标拖拽或者 Ctrl+方向键

# 节点

  • 节点 Node 是可放在显示列表中所有对象的基类;该显示列表管理着 Laya 运行时显示的所有对象。
  • Sprite 是 Node 的一个子类,那么 UI 组件也算作一个节点,这些节点可以添加子节点。
  • 功能类组件跟 UI 组件有区别,单功能类组件不在显示列表所以不会显示,也不能添加子节点,例如:脚本、物理组件、Widget 等等。
  • 像纹理组件 Texture 就不是节点,它无法添加子节点,如果将多个 Texture 添加到 Sprite 里,最终只生效一个,虽然看起来像是父子关系,其实不是的,只有节点与节点之间才有父子关系,Sprite 里 Texture 其实就是作用在 Sprite 本身的(算作 Sprite 的功能属性)。
  • 节点之间,父影响子,但子不影响父。

# 节点树

  • 开发中常用的手段,将游戏中一个模块里所有的东西放到一个容器里,这个容器与里面的其他节点构成了节点树
  • 只要改变最外层的位置和大小就可以改变当前模块所有的内容,也就是父影响子。
  • 如果你用不到,可以将容器打散,右键即可。