Particle Systems

在创建粒子之前,需要创建粒子系统。这是一个"容器",你可以把你的粒子和发射器(如果你需要的话)放在那里准备好使用,你可以在任何一个系统中放入你认为必要的尽可能多或尽可能少的粒子,你也可以有你认为必要的尽可能多的系统。但是,由于每个系统、发射器和粒子都占用内存,并且它们太多可能会减慢游戏速度或导致问题,因此最好保持这个数字尽可能小。例如,如果需要某些效果显示在实例上方,而其他效果显示在实例下方,则需要创建两个系统并设置其深度以获得所需的效果,并以指定的深度绘制添加到每个系统的所有粒子。

由于粒子系统是动态创建的资源,因此必须创建粒子系统并将返回的索引存储在变量中,以便在所有进一步的函数调用中引用该系统,并且非常重要的是,当不再需要粒子系统时,还要销毁该系统,否则会出现内存泄漏,从而降低速度并最终导致游戏崩溃。另外值得注意的是,粒子系统在创建后将永远存在,即使索引不再存储。因此,即使您更换空间或重新启动游戏,系统和粒子仍将保留,并且可以在所有其他房间中看到,这样您最好确保在不再需要它们时将其销毁。

提示 如果您喜欢更直观的方法来创建粒子,并且不需要 GML 代码 提供的大量功能,则还可以使用 粒子系统编辑器 创建 粒子系统资源 。此外,还可以使用编辑器的 复制 GML 到剪贴板 为其生成 GML 代码

将GML复制到剪贴板

使用 粒子系统编辑器" 将 GML 复制到剪贴板 " 按钮 ,可以生成创建与所创建粒子系统相同的粒子系统所需的 GML 代码 。例如,代码可以进入对象的 Create 事件:

创建事件

var _ps = part_system_create();
part_system_draw_order( _ps, true);

var _ptype1 = part_type_create();
part_type_shape( _ptype1, pt_shape_sphere );
part_type_size( _ptype1, 1, 1, 0, 0 );
part_type_scale( _ptype1, 1, 1);
part_type_speed( _ptype1, 2, 2, 0, 0);
part_type_direction( _ptype1, 0, 0, 4, 0);
part_type_gravity( _ptype1, 0, 270);
part_type_orientation( _ptype1, 0, 0, 0, 0, false);
part_type_colour3( _ptype1, $7F7FFF, $FFFFFF, $FFEFBC );
part_type_alpha3( _ptype1, 1, 1, 0.169);
part_type_blend( _ptype1, true);
part_type_life( _ptype1, 80, 80);

var _pemit1 = part_emitter_create( _ps );
part_emitter_region( _ps, _pemit1, -64, 64, -64, 64, ps_shape_rectangle, ps_distr_linear );
part_emitter_stream(_ps, _pemit1, _ptype1, 1);

part_system_position(_ps, room_width/2, room_height/2);

如上面的代码所示,如果将发射器配置为Stream模式,则发射器将开始流式粒子。默认情况下,粒子系统的位置设置为房间的中心。

重要事项粒子系统、发射器和类型必须手动销毁(例如:在清理事件中),以防止内存泄漏。

函数参考

建立

更新和绘图

一旦粒子添加到粒子系统,然后爆发或流入房间,它们通常会在每个步骤中自动更新,并根据用于定义粒子系统的参数进行绘制。但是,有时可能需要控制何时以及如何更新系统,以及如何绘制系统,并且GameMaker提供以下函数:

创建粒子

可以使用 粒子发射器 从某个区域爆发或流化粒子,但在许多情况下,这些不是必需的,实际上最好直接使用以下函数创建粒子: