【转载】使用Qt Quick Particle System粒子系统实现烟花效果

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Particles 2.0

Window 
{
    visible: true
    width: 800
    height: 530
    title: qsTr("Hello World")

    color: "black"

    ParticleSystem
    {
        id: particles
        anchors.fill: parent

        ImageParticle
        {
            groups: ["stage1"]
            source: "qrc:///particleresources/star.png"
            alphaVariation: 0.4
            colorVariation: 0.9
        }

        Emitter
        {
            id: burstEmitter
            x: 400 ; y: 480
            group: "stage1"
            emitRate: 1; lifeSpan: 1500;
            size: 50; endSize: 10; sizeVariation: 30
            acceleration: PointDirection {y: 100}
            velocity: AngleDirection
            {
                angle: 270;
                magnitude: 400;
                angleVariation: 40;
                magnitudeVariation: 50
            }
        }

        //烟花的小尾巴
        ImageParticle
        {
            groups: ["stage2"]
            source: "qrc:///particleresources/glowdot.png"
            color: "#11111111"
        }

        //跟随发射器
        TrailEmitter
        {
            group: "stage2";
            follow: "stage1"
            emitRatePerParticle: 100; lifeSpan: 2400
            lifeSpanVariation: 400
            acceleration: PointDirection {y: -60 }
            velocity: AngleDirection
            {
                angle: 270;
                magnitude: 40;
                angleVariation: 22;
                magnitudeVariation: 5
            }
            size: 16; endSize: 0; sizeVariation: 8;
        }

        ImageParticle
        {
            id: imageParticle
            groups: ["stage3"]
            source: "qrc:///particleresources/star.png"
            alpha: 0
            colorVariation: 0.2
            entryEffect: ImageParticle.Scale
            rotation: 60
            rotationVariation: 30
            rotationVelocity: 45
            rotationVelocityVariation: 15
        }

        Emitter
        {
            id: burstEmitter2
            group: "stage3"
            emitRate: 4000; lifeSpan: 3000;
            size: 30; endSize: 5; sizeVariation:10
            enabled: false
            velocity: CumulativeDirection
            {
                AngleDirection {angleVariation: 360; magnitudeVariation: 80;}
                PointDirection {y: 20}
            }
            acceleration: PointDirection {y: 10 }
        }

        Affector
        {
            system: particles
            width: parent.width
            height: 10; y: 90
            once: true
            groups: "stage1"
            onAffectParticles:
            {
                for (var i=0; i<particles.length; ++i)
                {
                    burstEmitter2.burst(300, particles[i].x, particles[i].y);//当经理
                    imageParticle.color = Qt.rgba(particles[i].red,
                                                  particles[i].green,
                                                  particles[i].blue,
                                                  particles[i].alpha)
                }
            }
        }
    }
}

漂亮的烟花爆炸效果。实现原理:发射器1发射一个粒子A,跟随发射器发射尾迹,尾迹跟随着粒子A,使用了基础的影响器 Affector,该影响器没有特殊的效果,作用是感应粒子A是否到达影响器区域,到达后发射器2在粒子A的位置发射300个粒子。

猜你喜欢

转载自blog.csdn.net/kenfan1647/article/details/121098404