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