粒子的旋轉作用於每一個粒子,除此之外,我們還可以設置粒子軌跡的方向。軌跡取決於一個指定的向量空間,該向量空間定義了粒子的速度和加速度,以及一個隨機的方向。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
屬性: