首页 > 代码库 > QML官方教程——Using the Qt Quick Particle System

QML官方教程——Using the Qt Quick Particle System

附网址:http://qt-project.org/doc/qt-5/qtquick-effects-particles.html


Using the Qt Quick Particle System—— 使用Qt Quick粒子系统

所有粒子系统的类型都可以在QtQuick.Particles模块文档中找到。

注意想要使用粒子模块中的类型,你需要使用下面这个代码进行引入:

import QtQuick.Particles 2.0

·

The ParticleSystem

粒子系统包含4个主要的QML类型:ParticleSystem,Painters,Emitters,和Affectors。

ParticleSystem类型需要与所有其他类型一起工作,并管理共享的时间线。Painters(绘制器)、Emitters(发射器)、Affectors(影响因子)必须在同一个ParticleSystem中相互作用。

你可能拥有多个ParticleSystems来实现复杂的效果,因此你应该将能够相互作用的类型放在一个ParticleSystem当中,或者当这些类型数量较少的时候只使用一个ParticleSystem。


Logical Particles —— 逻辑粒子

所有的粒子系统类型均基于“逻辑粒子”。每个粒子在粒子系统中都拥有一个逻辑表示形式,它决定了这些类型应该如何起作用。并不是每个逻辑粒子都需要被可视化,而某些逻辑粒子可以在屏幕上产生多颗可视化的粒子。


Particle Groups —— 粒子组

每个逻辑粒子都是粒子组的一个成员,且每个粒子都属于一个组。如果逻辑粒子所属群没被特别指明,它将被归于名为“”(空字符)的群。使用群组有两个用意,为了控制粒子,因为它们可以有随机的状态转换。

使用群组控制粒子的好处在于你不用使用任何粒子系统的类型来访问一个单独的粒子。群里的所有类型都像一个整体一样工作,因此任何需要与其他粒子表现不同(除了通常的随机参数变化)的粒子都应该被放在不同的粒子组中。

粒子也可以动态地更换组,并且粒子轨迹不会因此发生改变,不过这可以通过不同PatriclePainter或Affectors来实现。粒子也可以通过一个Affector改变其group,或者在ParticleGroup类型中定义随机的状态转换。

一般来讲,如果群组需要随机状态转换,它们可以仅仅定义在一个ParticleGroup中。否则,将有足够的群组被定义,使用particle/particles属性值作为组名。


Emitters —— 发送器

Emitters发送逻辑粒子到系统中。这些粒子有轨迹和寿命,但没有可视化。这些粒子从Emitter中定义的坐标位置发送出来。

TrailEmitters是一个特别的类型,其发射的粒子基于其他粒子的坐标。任何处在TrailEmitter范围内的下述的逻辑粒子都会引起TrailEmitter的发射,就像在那有一个与TrailEmitter属性相同的Emitter存在一样。


ParticlePainters —— 粒子绘制器

绘制器是一些用来可视化逻辑粒子的类型。对于分配给它的任意群组的粒子,在其定义的发射范围内(或者范围之外,如果你没有定义clip属性为真的话),粒子的可视化效果将依赖于这个ParticlePainter类型的定义。ParticlePainters基类不会绘制任何东西,ImageParticle会在粒子坐标上渲染一个图像,CustomParticle允许你基于顶点数据,使用自己的着色器来渲染粒子。ItemParticle允许你对任意的QML代理类型进行渲染。ModelParticle也是类似的,但它在代理中的坐标模型数据以类似视图类型中的方式进行处理。

既然ParticlePainter是用来在屏幕上绘制粒子的QML类型,那么对于其叠放层次我们应该设置它的Z值。


Stochastic Parameters —— 随机参数

粒子系统的随机行为得益于它多个用于产生随机参数的属性。如果你的这些参数不需要任何的随机性,那么你就不需要定义任何带有"variation"的属性。


Directions —— 方向

我们可以使用角度和强度来定义方向,或是采用x和y参数。不过呢,我们也可以对这几个参数采用随机参数,这样随机的x,y参数将定义一个矩形区域,而随机的角度将定义一个扇形。


Shapes —— 形状

粒子系统包含多个用来代表形状的类型。这些类型并不是用来可视化这个形状,而是用来产生在这个形状内的一系列随机点。如果你希望产生一个没有随机性的点,可以将这个形状的高度和宽度都设置为0(默认值)。否则你使用这些shape类型来指定一个区域,然后可以对这个区域中的随机点做你想要的操作。