此函数返回结构,其中包含有关使用粒子系统编辑器创建的粒子系统资源的信息。
返回的结构是一个粒子系统信息结构,其中包含一个由粒子发射器信息结构组成的数组。这些发射器结构中的每个结构都存储有关发射器在其parttype变量中使用的粒子类型的信息,该变量包含一个粒子类型信息结构。
警告如果没有向函数传递有效的粒子系统资源,GameMaker将抛出错误。
简而言之,该函数返回的结构内容如下所示:
part_sys_info_struct =
{
emitters:
[
{
parttype:
{
// Particle type properties...
}
// All other particle emitter properties...
}
// More emitters...
]
// All other particle system properties...
};
下表列出了这三个结构中每个结构中可用的所有变量。
变量名 | 数据类型 | 描述 |
---|---|---|
name | 字符串 | 粒子系统资源的名称。 |
xorigin | 实数 | 粒子系统的 X 原点。 |
yorigin | 实数 | 粒子系统的 Y 原点。 |
global_space | 布尔值 | 此粒子系统是否启用了全局空间粒子(请参见part_system_global_space)。 |
oldtonew | 布尔值 | 旧粒子是否应该画在新粒子后面 (true) 还是不应该 (false)。 |
emitters | Array of Particle Emitter Info Struct | 发射器信息结构数组,顺序与粒子系统编辑器中的相同。 |
变量名 | 数据类型 | 描述 |
---|---|---|
name | 字符串 | 发射器的名称。 |
mode | 粒子发射器模式常量 | 发射粒子的模式。可以是 ps_mode_stream 或 ps_mode_burst。 |
enabled | 布尔值 | 是否启用粒子发射器。 |
number | 实数 | 如果mode为ps_mode_stream,则为每帧创建的粒子数;如果mode为ps_mode_burst,则为仅创建一次的粒子数。相对模式下的密度(覆盖百分比)。 |
relative | 布尔值 | 发射器是否处于相对模式,其中发射器创建的粒子数与其区域的面积相关(请参见part_emitter_relative)。 |
xmin | 实数 | 发射器区域左侧的 X 坐标。 |
xmax | 实数 | 发射器区域右侧的 X 坐标。 |
ymin | 实数 | 发射器区域顶部的 Y 坐标。 |
ymax | 实数 | 发射器区域底部的 Y 坐标。 |
distribution | 粒子发射器分布常量 | 粒子的分布样式。ps_distr_*常量之一。 |
shape | 粒子发射器形状常量 | 发射器区域的形状。ps_shape_*常量之一。 |
parttype | 粒子类型信息结构 | 粒子类型信息结构,包含此发射器的粒子类型信息。 |
delay_min | 实数 | 流模式下粒子爆发之间的最小延迟,以delay_unit表示。 |
delay_max | 实数 | 流模式下粒子爆发之间的最大延迟,以delay_unit表示。 |
delay_unit | 时间源单位常数 | 表示delay_min和delay_max的单位 |
interval_min | 实数 | 流模式下粒子爆发之间的最短时间,以interval_unit表示。 |
interval_max | 实数 | 流模式下粒子爆发之间的最大时间,以interval_unit表示。 |
interval_unit | 时间源单位常数 | 表示interval_min和interval_max的单位。 |
变量名 | 数据类型 | 描述 |
---|---|---|
通用 | ||
ind | 粒子类型 ID | 粒子类型的索引。这可以与函数 part_particles_create 一起使用。 |
形状/精灵 | ||
sprite | Sprite Asset | 粒子类型使用的精灵的索引或 -1。 |
frame | 实数 | 如果使用了精灵,则为精灵子图像。 |
animate | 布尔值 | 如果为 true,则从 frame 子图像开始设置精灵动画。 |
stretch | 布尔值 | 如果为 true,则动画将在粒子的整个生命周期内拉伸。 |
random | 布尔值 | 如果为 true,则使用随机子图像而不是 frame。 |
shape | 粒子形状常数 | 粒子形状。pt_shape_* 常量之一。仅当子画面为 -1 时使用。 |
大小 | ||
size_xmin | 实数 | 此类型的粒子在创建时在X轴上可以具有的最小尺寸(每个粒子的尺寸随机确定,并且可以在size_xmin到size_xmax之间变化)。 |
size_ymin | 实数 | 创建此类型的粒子时,该粒子在Y轴上可以具有的最小尺寸(该尺寸是为每个粒子随机确定的,可以在size_ymin到size_ymax之间变化)。 |
size_xmax | 实数 | 创建此类型的粒子时,该粒子在X轴上可以具有的最大大小(每个粒子的大小是随机确定的,可以在size_xmin到size_xmax之间变化)。 |
size_ymax | 实数 | 创建此类型的粒子时,该粒子在Y轴上可以具有的最大大小(每个粒子的大小是随机确定的,可以在size_ymin到size_ymax之间变化)。 |
size_xincr | 实数 | 每帧增加/减少X轴上的粒子大小的值。 |
size_yincr | 实数 | 每帧增加/减少Y轴上的粒子大小的值。 |
size_xwiggle | 实数 | 每帧从粒子的X大小随机添加或减去的值。 |
size_ywiggle | 实数 | 每个帧从粒子的Y大小中随机添加或减去的值。 |
比例 | ||
xscale | 实数 | 粒子图像的 X 比例 (精灵或形状)。 |
yscale | 实数 | 粒子图像的 Y 比例 (精灵或形状)。 |
生命周期 | ||
life_min | 实数 | 此类型粒子的最小寿命(以帧数为单位)。 |
life_max | 实数 | 此类型粒子的最大寿命(以帧数为单位)。 |
二次粒子 | ||
death_type | 粒子类型 ID | 死亡或 -1 时产生的粒子类型。 |
death_number | 实数 | 死亡时产生的粒子数量。 |
step_type | 粒子类型 ID | 每一步产生的粒子类型或 -1。 |
step_number | 实数 | 每一步产生的粒子数。 |
速度 | ||
speed_min | 实数 | 创建粒子时的最小速度 (以每帧像素为单位)(此起始速度是为每个粒子随机确定的,范围从 speed_min 到 speed_max)。 |
speed_max | 实数 | 创建粒子时的最大速度 (以每帧像素为单位)(此起始速度是为每个粒子随机确定的,范围从 speed_min 到 speed_max)。 |
speed_incr | 实数 | 按每一帧增加/降低粒子速度的值。 |
speed_wiggle | 实数 | 每一帧的粒子速度随机增加或减去的值。 |
方向 | ||
dir_min | 实数 | 创建粒子时粒子的最小方向(以度为单位)(此起始方向是为每个粒子随机确定的,范围从 dir_min 到 dir_max)。 |
dir_max | 实数 | 创建粒子时粒子的最大方向(以度为单位)(此起始方向是为每个粒子随机确定的,范围从 dir_min 到 dir_max)。 |
dir_incr | 实数 | 按每一帧增加/减少粒子方向的值。 |
dir_wiggle | 实数 | 每一帧的粒子方向随机相加或相减的值。 |
重力 | ||
grav_amount | 实数 | 每帧应用于粒子的重力量(以每帧像素为单位)。 |
grav_dir | 实数 | 重力方向 |
定位 | ||
ang_min | 实数 | 创建粒子精灵时的最小起始角度(以度为单位)(此起始角度是为每个粒子随机确定的,范围从 ang_min 到 ang_max)。 |
ang_max | 实数 | 创建粒子精灵时的最大起始角度(以度为单位)(此起始角度是为每个粒子随机确定的,范围从 ang_min 到 ang_max)。 |
ang_incr | 实数 | 每一帧增加/减少粒子角度的值。 |
ang_wiggle | 实数 | 每个帧的粒子角度随机相加或相减的值。 |
ang_relative | 布尔值 | 如果为 true,则粒子角度相对于其方向。 |
颜色 & 透明度 | ||
color1 | 颜色 | 创建粒子时的颜色。 |
color2 | 颜色 | 粒子在其寿命的一半时的颜色。 |
color3 | 颜色 | 粒子在其寿命结束时的颜色。 |
alpha1 | 实数 | 粒子创建时的透明度。 |
alpha2 | 实数 | 粒子在其寿命的一半时的透明度。 |
alpha3 | 实数 | 粒子寿命结束时的透明度。 |
additive | 布尔值 | 如果为 true,则使用加法混合来绘制粒子(即使用混合模式常量 bm_add)。 |
最后,粒子发射器模式还有一个常量:
常量 | 描述 |
---|---|
ps_mode_stream | The particle emitter streams the given number of particles continuously (see part_emitter_stream) |
ps_mode_burst | The particle emitter emits a single burst of the given number of particles (see part_emitter_burst) |
particle_get_info(partsys);
参数 | 类型 | 描述 |
---|---|---|
partsys | 粒子系统资源 | 要从中获取信息的粒子系统资源。 |
var _particle_info = particle_get_info(ps_Clouds);
var _asset_name = _particle_info.name;
var _arr_emitters = _particle_info.emitters;
if (array_length(_arr_emitters) > 0)
{
var _type_info = _arr_emitters[0].parttype;
if (_type_info.additive)
{
show_debug_message("The first emitter in {0} creates shiny particles!", _asset_name);
}
}
上述代码首先使用 particle_get_info 从现有的 Particle System Assetps_Clouds 获取信息,并将返回的结构分配给临时变量 _particle_info。 然后,它通过 Particle System Info Struct 的 emitters 变量查找粒子系统中的发射器。 如果粒子系统包含任何发射器 (即数组的长度大于 0), 第一个发射器的 parttype 变量被分配给临时变量 _type_info,并检查加性混合 (bm_add)。最后,如果添加混合用于粒子类型,则会显示调试消息。
var _particle_info = particle_get_info(ps_Environment);
var _asset_name = _particle_info.name;
var _emitter_names = array_map(_particle_info.emitters, function(_element, _index) { return _element.name; });
_emitter_names = string_join_ext(", ", _emitter_names);
show_debug_message("{0} contains the following particle emitters: {1}", _asset_name, _emitter_names);
上面的代码首先调用 particle_get_info 以检索有关现有粒子系统资源 ps_Environment 的信息。资产名称存储在临时变量_asset_name中。之后,从粒子系统信息结构的emitters变量生成发射器名称数组,并使用 string_join_ext 将其转换为列出所有名称的字符串,以逗号分隔。最后,调试消息以可读的形式显示信息。