先上效果
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CXuVzVa1mVuNWdGdFZ1gmMZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zNzYzNxQzM5ADNxATM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
實作原理:利用粒子發射器的shape屬性實作。qml提供了三種類型EllipseShape, LineShape, and MaskShape。利用MaskShape實作即可。現在實作的這種方式是利用的現有圖檔(圖檔是png格式的)
,可以利用Canvas動态生成圖檔顯示,有興趣的可以試試。
代碼如下:
import QtQuick
import QtQuick.Particles
Rectangle {
//id : root
width:
height:
color: "black"
//[1]
//實作字的粒子效果 通過Emitter的 MaskShape 實作(圖檔背景要是透明的)
//
property url soururl: "qrc:/1.png"
property var urlstr: "qrc:/%1.png"
property int num:
ParticleSystem {
x: ;
y:
width:
height:
anchors.centerIn: parent
ImageParticle {
source: "qrc:///particleresources/glowdot.png"
z:
anchors.fill: parent
color: "#336666CC"
colorVariation:
}
Emitter {
anchors.fill: parent
emitRate:
lifeSpan:
size:
clip: true
endSize:
velocity: PointDirection { y: ; yVariation: }
shape: MaskShape {
source: soururl
}
}
}
Timer {
interval: ; running: true; repeat: true
onTriggered: {
soururl = urlstr.arg(num);
num++;
if (num == )
num = ;
}
}
//[1]
}