particle_get_info

此函数返回结构,其中包含有关使用粒子系统编辑器创建的粒子系统资源的信息。

返回的结构是一个粒子系统信息结构,其中包含一个由粒子发射器信息结构组成的数组。这些发射器结构中的每个结构都存储有关发射器在其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)。
emittersArray of Particle Emitter Info Struct发射器信息结构数组,顺序与粒子系统编辑器中的相同。

粒子发射器信息粒子发射器信息

粒子发射器信息结构
变量名数据类型描述
name字符串发射器的名称。
mode粒子发射器模式常量发射粒子的模式。可以是 ps_mode_streamps_mode_burst
enabled布尔值是否启用粒子发射器。
number实数如果modeps_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_mindelay_max的单位
interval_min实数流模式下粒子爆发之间的最短时间,以interval_unit表示。
interval_max实数流模式下粒子爆发之间的最大时间,以interval_unit表示。
interval_unit时间源单位常数表示interval_mininterval_max的单位。

粒子类型信息粒子类型信息

粒子类型信息结构
变量名数据类型描述
通用
ind粒子类型 ID粒子类型的索引。这可以与函数 part_particles_create 一起使用。
形状/精灵
spriteSprite Asset粒子类型使用的精灵的索引或 -1
frame实数如果使用了精灵,则为精灵子图像。
animate布尔值如果为 true,则从 frame 子图像开始设置精灵动画。
stretch布尔值如果为 true,则动画将在粒子的整个生命周期内拉伸。
random布尔值如果为 true,则使用随机子图像而不是 frame
shape粒子形状常数粒子形状。pt_shape_* 常量之一。仅当子画面为 -1 时使用。
大小
size_xmin实数此类型的粒子在创建时在X轴上可以具有的最小尺寸(每个粒子的尺寸随机确定,并且可以在size_xminsize_xmax之间变化)。
size_ymin实数创建此类型的粒子时,该粒子在Y轴上可以具有的最小尺寸(该尺寸是为每个粒子随机确定的,可以在size_yminsize_ymax之间变化)。
size_xmax实数创建此类型的粒子时,该粒子在X轴上可以具有的最大大小(每个粒子的大小是随机确定的,可以在size_xminsize_xmax之间变化)。
size_ymax实数创建此类型的粒子时,该粒子在Y轴上可以具有的最大大小(每个粒子的大小是随机确定的,可以在size_yminsize_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_minspeed_max)。
speed_max实数创建粒子时的最大速度 (以每帧像素为单位)(此起始速度是为每个粒子随机确定的,范围从 speed_minspeed_max)。
speed_incr实数按每一帧增加/降低粒子速度的值。
speed_wiggle实数每一帧的粒子速度随机增加或减去的值。
方向
dir_min实数创建粒子时粒子的最小方向(以度为单位)(此起始方向是为每个粒子随机确定的,范围从 dir_mindir_max)。
dir_max实数创建粒子时粒子的最大方向(以度为单位)(此起始方向是为每个粒子随机确定的,范围从 dir_mindir_max)。
dir_incr实数按每一帧增加/减少粒子方向的值。
dir_wiggle实数每一帧的粒子方向随机相加或相减的值。
重力
grav_amount实数每帧应用于粒子的重力量(以每帧像素为单位)。
grav_dir实数重力方向
定位
ang_min实数创建粒子精灵时的最小起始角度(以度为单位)(此起始角度是为每个粒子随机确定的,范围从 ang_minang_max)。
ang_max实数创建粒子精灵时的最大起始角度(以度为单位)(此起始角度是为每个粒子随机确定的,范围从 ang_minang_max)。
ang_incr实数每一帧增加/减少粒子角度的值。
ang_wiggle实数每个帧的粒子角度随机相加或相减的值。
ang_relative布尔值如果为 true,则粒子角度相对于其方向。
颜色 & 透明度
color1颜色创建粒子时的颜色。
color2颜色粒子在其寿命的一半时的颜色。
color3颜色粒子在其寿命结束时的颜色。
alpha1实数粒子创建时的透明度。
alpha2实数粒子在其寿命的一半时的透明度。
alpha3实数粒子寿命结束时的透明度。
additive布尔值如果为 true,则使用加法混合来绘制粒子(即使用混合模式常量 bm_add)。

 

最后,粒子发射器模式还有一个常量:

粒子发射器模式常量
常量描述
ps_mode_streamThe particle emitter streams the given number of particles continuously (see part_emitter_stream)
ps_mode_burstThe particle emitter emits a single burst of the given number of particles (see part_emitter_burst)

 

语法:

particle_get_info(partsys);

参数类型描述
partsys粒子系统资源要从中获取信息的粒子系统资源。

 

返回:

粒子系统信息结构

 

示例1:粒子类型信息

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 Structemitters 变量查找粒子系统中的发射器。 如果粒子系统包含任何发射器 (即数组的长度大于 0), 第一个发射器的 parttype 变量被分配给临时变量 _type_info,并检查加性混合 (bm_add)。最后,如果添加混合用于粒子类型,则会显示调试消息。

 

示例2:列出发射器名称

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 将其转换为列出所有名称的字符串,以逗号分隔。最后,调试消息以可读的形式显示信息。