Qt Quick Particles Ejemplos - Sistema

Esta es una colección de ejemplos usando Afectores en el sistema de partículas QML.

Esta es una colección de pequeños ejemplos QML relacionados con el uso de Afectores en el sistema de partículas. Cada ejemplo es un pequeño archivo QML que enfatiza un tipo o característica particular.

La comparación dinámica compara el uso del sistema de partículas con la obtención de un efecto similar con el siguiente código que instancia dinámicamente tipos de Imagen.

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(); }
            }
        }
    }
}

Observe cómo los objetos Imagen no pueden ser coloreados aleatoriamente.

Start y Stop simplemente establecen los estados de ejecución y pausa de un ParticleSystem. Mientras que el sistema no realiza ninguna simulación cuando se detiene o pausa, un reinicio reinicia la simulación desde el principio, mientras que unpausing reanuda la simulación desde donde estaba.

Los cambios de grupo temporizados son un ejemplo que pone de relieve el tipo ParticleGroup. Aunque normalmente referirse a los grupos con un nombre de cadena es suficiente, se pueden hacer efectos adicionales estableciendo propiedades en los grupos. El primer grupo tiene una duración variable, pero siempre pasa al segundo grupo.

ParticleGroup {
    name: "fire"
    duration: 2000
    durationVariation: 2000
    to: {"splode":1}
}

El segundo grupo tiene un TrailEmitter en él, y una duración fija para emitir en el tercer grupo. Al colocar el TrailEmitter como hijo directo del ParticleGroup, selecciona automáticamente ese grupo para seguirlo.

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}
    }
}

El tercer grupo tiene un Afector como hijo directo, lo que hace que el afector se dirija automáticamente a este grupo. El afector significa que tan pronto como las partículas entran en este grupo, una función de ráfaga puede ser llamada en otro emisor, usando las posiciones x,y de esta partícula.

ParticleGroup {
    name: "dead"
    duration: 1000
    Affector {
        once: true
        onAffected: (x, y)=> worksEmitter.burst(400,x,y)
    }
}

Si TrailEmitter no se adapta a sus necesidades para múltiples emisores, también puede crear dinámicamente Emisores sin dejar de utilizar el mismo ParticleSystem y la partícula de imagen

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()
}

Tenga en cuenta que este efecto, una ráfaga de lanzas arco iris voladoras, se realizaría mejor con TrailEmitter. Sólo se realiza con emisores dinámicos en este ejemplo para mostrar el concepto de forma más sencilla.

Múltiples Pintores muestra cómo controlar el orden de pintura de partículas individuales. Mientras que el orden de pintura de las partículas dentro de un ImagePainter no está estrictamente definido, los objetos ImageParticle siguen las reglas normales de ordenación Z para Qt Quick elementos. Este ejemplo permite pintar el interior de las partículas por encima de los bordes negros utilizando un par de ImageParticles, cada uno pintando diferentes partes de la misma partícula lógica.

Proyecto de ejemplo @ code.qt.io

© 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.