粒子的旋转作用于每一个粒子,除此之外,我们还可以设置粒子轨迹的方向。轨迹取决于一个指定的向量空间,该向量空间定义了粒子的速度和加速度,以及一个随机的方向。QML 提供了三个不同的向量空间,用于定义粒子的速度和加速度:
PointDirection
:使用 x 和 y 值定义的方向AngleDirection
:使用角度定义的方向TargetDirection
:使用一个目标点坐标定义的方向
下面我们详细介绍这几种向量空间。
首先,我们讨论AngleDirection
。要使用AngleDirection
,我们需要将其赋值给Emitter
的velocity
属性:
粒子发射角度使用angle
属性定义。angle
属性的取值范围是[0, 360),0 为水平向右。在我们例子中,我们希望粒子向右发射,因此angle
设置为 0;粒子发射范围则是 +/-5 度:
现在我们设置好了方向,下面继续设置粒子速度。粒子的速度由magnitude
属性决定。magnitude
单位是像素/秒。如果我们的场景宽度是 640px,那么将magnitude
设置为 100 或许还不错。这意味着,粒子平均需要耗费 6.4 秒时间从场景一端移动到另一端。为了让粒子速度更有趣,我们还要设置magnitudeVariation
属性。这会为该速度设置一个可变的范围区间:
下面是Emitter
的完整代码。
要运行上面的代码,只需要将上一章的示例程序中Emitter
替换下即可。根据前面的描述,由于我们将magnitude
设置为 100,因此粒子的平均生命周期为 6.4 秒。另外,我们将发射器的宽度和高度都设置为 1px,意味着所有粒子都会从相同位置发射,也就具有相同的轨迹起点。
接下来我们来看加速度。加速度为每一个粒子增加一个加速度向量,该向量会随时间的流逝而改变速度。例如,我们创建一个类似星轨的轨迹,为了达到这一目的,我们将速度方向修改为 -45 度,并且移除速度变量区间:
加速度方向为 90 度向下,数值为 25:
那么,这段代码的执行结果如下所示:
至于为什么这个加速度能够形成这样的轨迹,已经超出了本文的范围,这里不再赘述。
下面介绍另外一种方向的定义。PointDirection
使用 x 和 y 值导出向量空间。例如,你想要让粒子轨迹沿着 45 度角的方向,那么就需要将 x 和 y 设置成相同的值。在我们的例子中,我们希望粒子轨迹从左向右,成为一个 15 度的角。为了设置粒子轨迹,首先我们需要将PointDirection
赋值给Emitter
的velocity
属性: