Qt Quick提供了一个粒子系统,提供了四种主要的 QML 类型:
- ParticleSystem ,粒子系统,它维护一个粒子系统相关的 Emitters 、 Painters 、 Affectors ,Emitters 、 Painters 、 Affectors 要想一起玩儿,就得指定同一个 ParticleSystem。 ParticleSystem
- Painters , 它负责渲染一个粒子。ParticlePainter 是基类, CustomParticle 、 ImageParticle 、 ItemParticle 是 Qt Quick 内置的三种粒子,都是 ParticlePainter 的派生类。
- Emitters ,发射器,可以在给定的区域内突突突地发射逻辑粒子。具体的类为 Emitter 。
- Affectors , 效果器,通过改变发射出去的逻辑粒子的属性来产生特效。 Qt Quick 内置了 Age 、 Gravity 、Friction 、 Attractor 等等效果器。
吹泡泡
小孩子很喜欢吹泡泡,有手动的,拿个形似放大镜的玩意儿在泡泡液里蘸一下,嘟起小嘴一吹,五彩缤纷的泡泡就漫天飞舞了。还有一种泡泡机,自动的,形状跟枝枪似的,有个开关,按着不放,它就不停的发射泡泡。我们的示例就模仿吹泡泡的效果。
要使用粒子系统,得引入粒子模块:
import QtQuick.Particles 2.0
ParticleSystem 、 Emitter 、 ImageParticle 、 ItemParticle 等等都在 Particles 这个模块里。
好啦,创建一个 Qt Quick App 项目,加入一个泡泡图片,如下图:
然后就是 main.qml 了:
import QtQuick 2.2
import QtQuick.Window 2.1
import QtQuick.Particles 2.0
Window {
visible: true;
width: 600;
height: 400;
color: "lightblue";
id: root;
Rectangle {
id: target;
color: "transparent";
width: parent.width/2;
height: 100;
anchors.top: parent.top;
anchors.right: parent.right;
anchors.margins: 4;
}
ParticleSystem {
id: particleSystem;
}
Emitter {
id: emitter;
system: particleSystem;
anchors.left: parent.left;
anchors.bottom: parent.bottom;
width: 80;
height: 80;
size: 20;
endSize: 80;
sizeVariation: 10;
emitRate: 20;
lifeSpan: 4000;
lifeSpanVariation: 200;
velocity: Targ