Qt Quick 粒子示例 - 发射器

这是使用 QML 粒子系统发射器的示例集合。

这是关于在粒子系统中使用发射器的小型 QML 示例集合。每个示例都是一个强调特定类型或特性的小型 QML 文件。

从运动中获得速度,使粒子主要通过移动发射器产生强烈的粒子运动效果

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
}

爆发和脉冲调用两个相同发射器的爆发和脉冲方法。

    if (root.lastWasPulse) {
        burstEmitter.burst(500);
        root.lastWasPulse = false;
    } else {
        pulseEmitter.pulse(500);
        root.lastWasPulse = true;
    }

注意爆发参数接受粒子数量以发射,而脉冲参数接受持续时间(以毫秒为单位)来发射。这给出了一种不同的行为,在本例中很容易看到。

自定义发射器通过连接到 emitParticles 信号来设置粒子数据的任意值;

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

这用于在六个旋转的辐条中发射曲线形的粒子。

发射遮罩为发射器设置图像遮罩,可以从任意形状发射。

shape: MaskShape {
    source: "images/starfish_mask.png"
}

最大发射数一次最多发射一定数量的粒子。本例易于显示何时达到限制。

形状和方向使用 TargetDirection 从空心的椭圆形状发射粒子

shape: EllipseShape {fill: false}
velocity: TargetDirection {
    targetX: root.width/2
    targetY: root.height/2
    proportionalMagnitude: true
    magnitude: 0.5
}

这使粒子以成比例的速度向椭圆中心移动,同时保持椭圆轮廓在移动时。

尾随发射器 使用该类型向场景中的火粒子添加烟雾粒子;

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

示例项目 @ code.qt.io

© 2024 The Qt Company Ltd. 文档贡献的版权归其所有者。本文件中提供的文档是根据由自由软件基金会发布的 GNU 自由文档许可证版本 1.3 许可的。Qt 和相应的徽标是芬兰及/或全球其他国家的商标。所有其他商标为其各自所有者的财产。