Qt Quick Exemples de particules - Système
Il s'agit d'une collection d'exemples utilisant les Affectors dans le système de particules QML.

Il s'agit d'une collection de petits exemples QML relatifs à l'utilisation des Affectors dans le système de particules. Chaque exemple est un petit fichier QML mettant l'accent sur un type ou une caractéristique particulière.
La comparaison dynamique compare l'utilisation du système de particules à l'obtention d'un effet similaire avec le code suivant qui instancie dynamiquement les types d'images.
Item { id: fakeEmitter function burst(number) { while (number > 0) { let item = fakeParticle.createObject(root) item.lifeSpan = Math.random() * 5000 + 5000 item.x = Math.random() * (root.width / 2) + (root.width / 2) item.y = 0 number-- } } Component { id: fakeParticle Image { id: container property int lifeSpan: 10000 width: 32 height: 32 source: "qrc:///particleresources/glowdot.png" PropertyAnimation on y { from: -16; to: root.height - 16; duration: container.lifeSpan; running: true } SequentialAnimation on opacity { running: true NumberAnimation { from: 0; to: 1; duration: 500 } PauseAnimation { duration: container.lifeSpan - 1000 } NumberAnimation { from: 1; to: 0; duration: 500 } ScriptAction { script: container.destroy(); } } } } }
Notez que les objets Image ne peuvent pas être colorés de manière aléatoire.
Start et Stop définissent simplement les états de marche et de pause d'un site ParticleSystem. Bien que le système n'effectue aucune simulation lorsqu'il est arrêté ou en pause, un redémarrage relance la simulation depuis le début, tandis que l'annulation de la pause reprend la simulation là où elle se trouvait.
Les changements de groupe temporisés sont un exemple qui met en évidence le type ParticleGroup. Bien qu'il suffise normalement de désigner les groupes par une chaîne de caractères, des effets supplémentaires peuvent être obtenus en définissant des propriétés sur les groupes. Le premier groupe a une durée variable, mais il passe toujours au deuxième groupe.
ParticleGroup { name: "fire" duration: 2000 durationVariation: 2000 to: {"splode":1} }
Le deuxième groupe a une TrailEmitter et une durée fixe pour l'émission dans le troisième groupe. En plaçant le TrailEmitter comme enfant direct du ParticleGroup, il sélectionne automatiquement ce groupe à suivre.
ParticleGroup { name: "splode" duration: 400 to: {"dead":1} TrailEmitter { group: "works" emitRatePerParticle: 100 lifeSpan: 1000 maximumEmitted: 1200 size: 8 velocity: AngleDirection {angle: 270; angleVariation: 45; magnitude: 20; magnitudeVariation: 20;} acceleration: PointDirection {y:100; yVariation: 20} } }
Le troisième groupe a un affectateur comme enfant direct, ce qui fait que l'affectateur cible automatiquement ce groupe. L'affector signifie que dès que des particules entrent dans ce groupe, une fonction burst peut être appelée sur un autre émetteur, en utilisant les positions x,y de cette particule.
ParticleGroup { name: "dead" duration: 1000 Affector { once: true onAffected: (x, y)=> worksEmitter.burst(400,x,y) } }
Si TrailEmitter ne répond pas à vos besoins en matière d'émetteurs multiples, vous pouvez également créer des émetteurs de manière dynamique tout en utilisant la même ParticleSystem et la même particule d'image.
for (var i = 0; i < 8; i++) { let obj = emitterComp.createObject(root) obj.x = x obj.y = y obj.targetX = Math.random() * 240 - 120 + obj.x obj.targetY = Math.random() * 240 - 120 + obj.y obj.life = Math.round(Math.random() * 2400) + 200 obj.emitRate = Math.round(Math.random() * 32) + 32 obj.go() }
Notez que cet effet, une rafale de lances arc-en-ciel volantes, serait mieux servi avec TrailEmitter. Il n'est fait qu'avec des émetteurs dynamiques dans cet exemple pour montrer le concept plus simplement.
L'option Peintres multiples montre comment contrôler l'ordre de peinture des particules individuelles. Bien que l'ordre de peinture des particules au sein d'un ImagePainter ne soit pas strictement défini, les objets ImageParticle suivent les règles normales d'ordre Z pour les Qt Quick éléments. Cet exemple vous permet de peindre l'intérieur des particules au-dessus des bordures noires à l'aide d'une paire d'ImageParticles, chacune peignant des parties différentes de la même particule logique.
© 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.