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屬性:

相關文章
相關標籤/搜索