Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

组件

组件用于赋予游戏对象特定的表达和/或功能。组件必须包含在游戏对象内部,并受包含该组件的游戏对象的位置、旋转和缩放的影响:

Components

许多组件具有可在运行时操作的特定属性,并且有特定于组件类型的函数可用于在运行时与它们交互:

-- 禁用 "can" 的 "body" 精灵
msg.post("can#body", "disable")

-- 1 秒后在 "bean" 上播放 "hoohoo" 声音
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )

组件可以直接添加到游戏对象中,也可以作为组件文件的引用添加到游戏对象:

Outline 视图中右键点击游戏对象,然后选择 Add Component(原地添加)或 Add Component File(添加为文件引用)。

在大多数情况下,原地创建组件是最有意义的,但以下组件类型必须先创建为单独的资源文件,然后才能通过引用添加到游戏对象:

  • 脚本 (Script)
  • 图形用户界面 (GUI)
  • 粒子效果 (Particle FX)
  • 瓦片地图 (Tile Map)

组件类型

Defold 支持以下组件类型:

可以通过扩展添加其他组件:

启用和禁用组件

游戏对象的组件在游戏对象创建时被启用。如果您希望禁用组件,可以通过向组件发送disable消息来完成:

-- 禁用与此脚本在同一游戏对象上的id为'weapon'的组件
msg.post("#weapon", "disable")

-- 禁用'enemy'游戏对象上id为'shield'的组件
msg.post("enemy#shield", "disable")

-- 禁用当前游戏对象上的所有组件
msg.post(".", "disable")

-- 禁用'enemy'游戏对象上的所有组件
msg.post("enemy", "disable")

要再次启用组件,您可以向组件发送enable消息:

-- 启用id为'weapon'的组件
msg.post("#weapon", "enable")

组件属性

Defold组件类型都有不同的属性。编辑器中的属性面板将显示大纲面板中当前选定组件的属性。请参考不同组件类型的手册以了解有关可用组件属性的更多信息。

组件位置、旋转和缩放

可视组件通常具有位置和旋转属性,大多数情况下还具有缩放属性。这些属性可以从编辑器中更改,并且在几乎所有情况下都不能在运行时更改(唯一的例外是精灵和标签组件缩放,可以在运行时更改)。

如果您需要在运行时更改组件的位置、旋转或缩放,您可以修改组件所属游戏对象的位置、旋转或缩放。这会产生副作用,即游戏对象上的所有组件都会受到影响。如果您希望只操作附加到游戏对象的多个组件中的一个,建议将相关组件移动到单独的游戏对象,并作为该组件原本所属的游戏对象的子游戏对象添加。

组件绘制顺序

可视组件的绘制顺序取决于两个方面:

渲染脚本谓词

每个组件都被分配一个材质,每个材质有一个或多个标签。渲染脚本反过来定义多个谓词,每个谓词匹配一个或多个材质标签。渲染脚本谓词在渲染脚本的update()函数中逐个绘制,匹配每个谓词中定义的标签的组件将被绘制。默认渲染脚本首先在一个通道中绘制精灵和瓦片地图,然后在另一个通道中绘制粒子效果,两者都在世界空间中。然后渲染脚本将继续在屏幕空间中的单独通道中绘制GUI组件。

组件z值

所有游戏对象和组件都使用vector3对象表示的位置定位在3D空间中。当您以2D查看游戏的图形内容时,X和Y值确定对象在”宽度”和”高度”轴上的位置,而Z位置确定对象在”深度”轴上的位置。Z位置允许您控制重叠对象的可见性:Z值为1的精灵将出现在Z位置0的精灵前面。默认情况下,Defold使用允许Z值在-1和1之间的坐标系:

model

匹配渲染谓词的组件一起绘制,它们绘制的顺序取决于组件的最终z值。组件的最终z值是组件本身的z值、它所属的游戏对象的z值以及任何父游戏对象的z值之和。

多个GUI组件的绘制顺序不是由GUI组件的z值决定的。GUI组件绘制顺序由gui.set_render_order()函数控制。

示例:两个游戏对象A和B。B是A的子对象。B有一个精灵组件。

内容 Z值
A 2
B 1
B#sprite 0.5

使用上述层次结构,B上精灵组件的最终z值为2 + 1 + 0.5 = 3.5。

如果两个组件具有完全相同的z值,则顺序是未定义的,您可能会遇到组件来回闪烁或组件在一个平台上以一种顺序渲染而在另一个平台上以另一种顺序渲染的情况。

渲染脚本为z值定义了近裁剪面和远裁剪面。任何z值超出此范围的组件都不会被渲染。默认范围是-1到1,但可以轻松更改。当近和远限制为-1和1时,Z值的数值精度非常高。在处理3D资源时,您可能需要在自定义渲染脚本中更改默认投影的近和远限制。有关更多信息,请参见渲染手册

组件最大数量优化

配置文件 game.project 包含许多值,用于指定可以同时存在的特定资源的最大数量,通常按每个加载的集合(也称为世界)计算。Defold 引擎将使用这些最大值来预分配相应数量的内存,以避免游戏运行时的动态分配和内存碎片。

用于表示组件和其他资源的 Defold 数据结构经过优化,以使用尽可能少的内存,但在设置这些值时仍应小心,以避免分配超过实际需要的内存。

为了进一步优化内存使用,Defold 构建过程将分析游戏内容,并在可以确定确切数量时覆盖最大计数:

  • 如果集合不包含任何工厂组件,则将分配每个组件和游戏对象的精确数量,并忽略最大计数值。
  • 如果集合包含工厂组件,将分析生成的对象,并使用最大计数来处理可以从工厂生成的组件和游戏对象。
  • 如果集合包含一个工厂或集合工厂,并且激活了 “Dynamic Prototype” 选项,则该集合将使用最大计数器。