Qt Quick Particles Exemples - Émetteurs
Voici une série d'exemples d'utilisation des émetteurs dans le système de particules QML.

Il s'agit d'une série de petits exemples QML relatifs à l'utilisation des émetteurs dans le système de particules. Chaque exemple est un petit fichier QML mettant en avant un type ou une fonctionnalité particulière.
La vitesse issue du mouvement crée un effet de mouvement intense des particules, principalement en déplaçant les émetteurs :
Emitter {
id: trailsNormal
system: sys1
emitRate: 500
lifeSpan: 2000
y: mouseArea.pressed ? mouseArea.mouseY : circle.cy
x: mouseArea.pressed ? mouseArea.mouseX : circle.cx
velocity: PointDirection {xVariation: 4; yVariation: 4;}
acceleration: PointDirection {xVariation: 10; yVariation: 10;}
velocityFromMovement: 8
size: 8
sizeVariation: 4
}« Burst » et « pulse » appellent les méthodes « burst » et « pulse » sur deux émetteurs identiques.
if (root.lastWasPulse) {
burstEmitter.burst(500);
root.lastWasPulse = false;
} else {
pulseEmitter.pulse(500);
root.lastWasPulse = true;
}Notez que « burst » prend en argument le nombre de particules à émettre, tandis que « pulse » prend en argument la durée d'émission en millisecondes. Cela donne un comportement légèrement différent, facile à observer dans cet exemple.
« Custom Emitter » se connecte au signal « emitParticles » pour définir des valeurs arbitraires sur les données des particules au moment de leur émission ;
onEmitParticles: (particles) => {
for (var i=0; i<particles.length; i++) {
let particle = particles[i];
particle.startSize = Math.max(02,Math.min(492,Math.tan(particle.t/2)*24));
let theta = Math.floor(Math.random() * 6.0);
particle.red = theta == 0 || theta == 1 || theta == 2 ? 0.2 : 1;
particle.green = theta == 2 || theta == 3 || theta == 4 ? 0.2 : 1;
particle.blue = theta == 4 || theta == 5 || theta == 0 ? 0.2 : 1;
theta /= 6.0;
theta *= 2.0*Math.PI;
theta += sys.convert(sys.petalRotation);//Convert from degrees to radians
particle.initialVX = sys.petalLength * Math.cos(theta);
particle.initialVY = sys.petalLength * Math.sin(theta);
particle.initialAX = particle.initialVX * -0.5;
particle.initialAY = particle.initialVY * -0.5;
}
}Cette fonction est utilisée pour émettre des particules décrivant des courbes selon six rayons rotatifs.
« Emit mask » définit un masque d’image sur l’émetteur, afin d’émettre des particules selon une forme arbitraire.
shape: MaskShape {
source: "images/starfish_mask.png"
}« Maximum emitted » limite le nombre de particules émises à un certain nombre à la fois. Cet exemple permet de voir facilement ce qui se passe lorsque la limite est atteinte.
« Shape and Direction » émet des particules à partir d’une forme elliptique non remplie, en utilisant un TargetDirection
shape: EllipseShape {fill: false}
velocity: TargetDirection {
targetX: root.width/2
targetY: root.height/2
proportionalMagnitude: true
magnitude: 0.5
}Cela envoie les particules vers le centre de l’ellipse à une vitesse proportionnelle, en conservant le contour de l’ellipse à mesure qu’elles se déplacent vers le centre.
TrailEmitter utilise ce type pour ajouter des particules de fumée qui suivent les particules de feu dans la scène.
onEmitParticles: (particles) => {
for (var i=0; i<particles.length; i++) {
let particle = particles[i];
particle.startSize = Math.max(02,Math.min(492,Math.tan(particle.t/2)*24));
let theta = Math.floor(Math.random() * 6.0);
particle.red = theta == 0 || theta == 1 || theta == 2 ? 0.2 : 1;
particle.green = theta == 2 || theta == 3 || theta == 4 ? 0.2 : 1;
particle.blue = theta == 4 || theta == 5 || theta == 0 ? 0.2 : 1;
theta /= 6.0;
theta *= 2.0*Math.PI;
theta += sys.convert(sys.petalRotation);//Convert from degrees to radians
particle.initialVX = sys.petalLength * Math.cos(theta);
particle.initialVY = sys.petalLength * Math.sin(theta);
particle.initialAX = particle.initialVX * -0.5;
particle.initialAY = particle.initialVY * -0.5;
}
}© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.