本页内容

使用Qt Quick 粒子系统

所有粒子系统类型的文档均可在QtQuick.Particles 模块页面上找到。

要使用particles模块中的类型,请使用以下代码行导入该模块:

import QtQuick.Particles

粒子系统

该粒子系统包含四种主要的 QML 类型:ParticleSystem 、Painters、Emitters 和 Affectors。

ParticleSystem 类型将所有其他类型整合在一起,并管理共享的时间轴。Painters、Emitters 和 Affectors 必须具有相同的ParticleSystem ,才能相互交互。

在满足这一约束条件的前提下,您可以创建任意数量的 ParticleSystems;因此,合理的划分方式是:若需让多种类型相互交互,则为所有相关类型设置一个ParticleSystem ;若类型数量较少且易于管理,则仅需一个即可。

逻辑粒子

所有粒子系统类型都作用于“逻辑粒子”。每个粒子在粒子系统内部都有一个逻辑表示,而类型正是作用于此。并非每个逻辑粒子都需要可视化,有些逻辑粒子可能会导致屏幕上绘制多个视觉粒子。

粒子组

每个逻辑粒子都属于一个粒子组,每个组都通过名称进行标识。如果未指定其他组,则逻辑粒子属于名称为“”(空字符串)的组,该组的行为与其他任何组相同。 群组主要有两个用途:控制粒子,以及支持随机状态转换。

组之所以用于控制粒子,是因为无论使用哪种粒子系统类型,都无法直接访问单个粒子。所有类型都对整个组进行操作,因此任何需要表现得与其他粒子不同的粒子(除通常的随机参数变化外),都必须位于不同的组中。

粒子还可以动态地切换所属组。此时,粒子的轨迹保持不变,但会受到不同的 ParticlePainters 或 Affector 的影响。粒子的组既可以由 Affector 更改,也可以通过在ParticleGroup 类型中定义随机状态转换来实现。

通常,只有当需要随机状态转换时,才应在ParticleGroup 中定义组。否则,仅通过类型中particle/particles属性所用的字符串来定义组即可。

发射器

发射器将逻辑粒子发射到系统中。这些粒子具有轨迹和生命周期,但无可视化效果。这些粒子从发射器的位置发射出来。

TrailEmitters 是一种特殊的发射器,它从其他逻辑粒子的位置发射粒子。在TrailEmitter 的边界内,任何符合指定类型的逻辑粒子都会从其位置引发粒子发射,就好像该粒子上放置了一个与TrailEmitter 具有相同属性的发射器一样。

粒子绘制器

绘制器(Painters)是用于可视化逻辑粒子的类型。对于分配给它的组中位于其边界内的每个逻辑粒子(如果未在类型上设置clip属性,则包括边界外的粒子),它将根据ParticlePainter 的类型以特定方式进行可视化。ParticlePainter 的基类不会绘制任何内容。ImageParticle 会在粒子位置渲染一张图像。ItemParticle 允许您使用任意的 QML 委托来可视化逻辑粒子。ModelParticle 与此类似,但它会像视图类那样在委托之间协调模型数据。

由于ParticlePainter 是用于在场景中可视化粒子的QML类型,因此在尝试将粒子视觉上置于其他类型之上或之下时,其Z值至关重要。

影响器

影响器是粒子系统中的可选组件。它们可以对模拟执行多种操作,例如改变粒子的轨迹,或提前结束其在模拟中的生命周期。出于性能考虑,建议在高密度粒子系统中不要使用影响器。

随机参数

由于粒子系统在大量实例中受益于参数的随机控制,因此粒子系统使用了多种随机辅助类型。若不希望这些参数存在任何随机变化,则请勿为这些类型指定任何变化。

方向

方向可以通过角度和大小,或者通过 x 和 y 分量来指定。虽然两种方法都可以指定任何方向,但改变 x 和 y 分量与改变角度和大小之间存在显著差异。 调整 x 和 y 分量将形成以指定点为中心的矩形区域,而调整角度则会形成以指定点为中心的弧形区域。

形状

粒子系统包含几种代表形状的类型。这些类型不会可视化形状,而是用于在形状内选择一个随机点。如果您想要一个不带随机性的特定点,请使用宽度为 0、高度为 0 的形状(这是默认设置)。 否则,您可以使用形状类型来指定一个区域,以便结果可以从该区域中随机选取一个点。

另请参阅 《Qt Quick Particles 示例——发射器》、《示例:影响器》、《示例:图像粒子》以及《示例:影响器——系统》。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.