Qt Quick Particles Beispiele - System
Dies ist eine Sammlung von Beispielen zur Verwendung von Affectors im QML-Partikel-System.
Dies ist eine Sammlung von kleinen QML-Beispielen, die sich auf die Verwendung von Affectors im Partikelsystem beziehen. Jedes Beispiel ist eine kleine QML-Datei, die einen bestimmten Typ oder eine bestimmte Funktion hervorhebt.
Der dynamische Vergleich vergleicht die Verwendung des Partikelsystems mit der Erzielung eines ähnlichen Effekts mit dem folgenden Code, der Bildtypen dynamisch instanziiert.
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(); } } } } }
Beachten Sie, dass die Bildobjekte nicht zufällig eingefärbt werden können.
Start und Stop setzen einfach den laufenden und den angehaltenen Zustand eines ParticleSystem. Während das System keine Simulation durchführt, wenn es gestoppt oder angehalten wird, startet ein Neustart die Simulation von Anfang an, während das Aufheben der Pause die Simulation dort fortsetzt, wo sie war.
Zeitlich begrenzte Gruppenänderungen sind ein Beispiel, das den Typ ParticleGroup verdeutlicht. Während es normalerweise ausreicht, sich auf Gruppen mit einem Stringnamen zu beziehen, können zusätzliche Effekte durch das Festlegen von Eigenschaften für Gruppen erzielt werden. Die erste Gruppe hat eine variable Dauer, geht aber immer in die zweite Gruppe über.
ParticleGroup { name: "fire" duration: 2000 durationVariation: 2000 to: {"splode":1} }
Die zweite Gruppe hat eine TrailEmitter und eine feste Dauer für den Übergang zur dritten Gruppe. Indem TrailEmitter als direktes Kind der ParticleGroup platziert wird, wählt es automatisch die Gruppe aus, der es folgt.
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} } }
Die dritte Gruppe hat einen Affector als direktes Kind, so dass der Affector automatisch auf diese Gruppe abzielt. Der Affector bedeutet, dass, sobald Partikel diese Gruppe betreten, eine Burst-Funktion auf einem anderen Emitter aufgerufen werden kann, wobei die x,y-Positionen dieses Partikels verwendet werden.
ParticleGroup { name: "dead" duration: 1000 Affector { once: true onAffected: (x, y)=> worksEmitter.burst(400,x,y) } }
Wenn TrailEmitter für mehrere Emitter nicht geeignet ist, können Sie auch dynamisch Emitter erstellen und dabei immer noch dieselbe ParticleSystem und Bildpartikel verwenden.
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() }
Beachten Sie, dass dieser Effekt, eine Flut von fliegenden Regenbogenspeeren, besser mit TrailEmitter zu erreichen wäre. In diesem Beispiel wird er nur mit dynamischen Emittern erzeugt, um das Konzept einfacher zu zeigen.
Multiple Painters zeigt, wie man die Reihenfolge der Bemalung einzelner Partikel steuern kann. Während die Malreihenfolge von Partikeln innerhalb eines ImagePainters nicht streng definiert ist, folgen ImageParticle Objekte den normalen Z-Reihenfolgen für Qt Quick Objekte. In diesem Beispiel können Sie das Innere der Partikel oberhalb der schwarzen Ränder malen, indem Sie ein Paar ImageParticles verwenden, die jeweils verschiedene Teile desselben logischen Partikels malen.
© 2025 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.