Qt 学习之路 2(91):粒子系统(续)

粒子的旋转作用于每一个粒子,除此之外,我们还可以设置粒子轨迹的方向。轨迹取决于一个指定的向量空间,该向量空间定义了粒子的速度和加速度,以及一个随机的方向。QML 提供了三个不同的向量空间,用于定义粒子的速度和加速度:

  • PointDirection:使用 x 和 y 值定义的方向
  • AngleDirection:使用角度定义的方向
  • TargetDirection:使用一个目标点坐标定义的方向

下面我们详细介绍这几种向量空间。

首先,我们讨论AngleDirection。要使用AngleDirection,我们需要将其赋值给Emittervelocity属性:

粒子发射角度使用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赋值给Emittervelocity属性:

相关文章
相关标签/搜索