QML粒子系统-Affector(2)

1,127 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 15 天,点击查看活动详情


📒博客首页:何名取 的个人主页 - 文章 - 掘金 (juejin.cn)
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
❤️期待一起交流!
🙏作者水平很有限,如果发现错误,求告知,多谢!
🌺有问题可私信交流!!!


Affector影响器的子类型

前言

前面已经简单介绍了Affector影响器和其基础类型的属性,并且使用基础类型的属性进行了示例。另外,Affector影响器还有八个子类型。本节将对这几个子类型进行介绍和示例。

  • Age
  • Attractor
  • Friction
  • Gravity
  • GroupGoal
  • SpriteGoal
  • Turbulence
  • Wander

Age

改变粒子的生命,通常的用法是让粒子提前过期。Age影响器有时也被称为“Kill”影响器,因为使用默认参数,它将立即终止它所影响的所有粒子。

属性类型描述
advancePositionbooladvancePosition决定影响器所做的模拟老化是否包括位置、速度和加速度。如果advancePosition为false,则位置、速度和加速度将保持不变,只有其他属性(如不透明度)将在模拟中推进到粒子生命周期中该点的正常位置。当advancePosition设置为true时,速度和加速度也会提前到粒子生命周期中通常的位置,使其在屏幕上的位置提前。
lifeLeftint粒子具有的生命量。受影响的粒子将前进到生命中的一个点,在那里它们将剩下这么多毫秒可以生存。

代码示例

此处的代码片段定义了一个矩形区域,粒子经过该区域时将加速粒子的死亡,将粒子的寿命缩短到0.08毫秒。

        Age {
            anchors.fill: parent; system: particles
            lifeLeft: 80; once: true; advancePosition: false
        }

效果展示

age.gif 从图中可以看到,从上方往下的粒子经过矩形块后,被Age影响器更改了生命值,加速消失。

Attractor

将粒子吸引到一个特定的点。注意,这个元素的大小和位置会影响它所影响的粒子。吸引到的点的大小总是0x0,并且该点的位置由pointX和pointY属性指定。

注意,吸引器有标准的Item x,y,width和height属性。像其他影响器一样,这些代表受影响的区域。它们不代表0x0点,这是吸引力的目标。

属性类型描述
affectedParameterAffectableParameter粒子的哪些属性直接受到影响。
Attractor.Position
Attractor.Velocity
Attractor.Acceleration
proportionalToDistanceProportion粒子到点的距离如何影响引力的强度。
Attractor.Constant
Attractor.Linear
Attractor.InverseLinear
Attractor.Quadratic
Attractor.InverseQuadratic

代码示例

将上面Age影响器改为Attractor影响器,设置目标点位置为(0,0)。

        Attractor {
            anchors.fill: parent; system: particles
            pointX: 0; pointY: 0;
            strength: 40000000;
            affectedParameter: Attractor.Acceleration
            proportionalToDistance: Attractor.InverseQuadratic
        }

效果展示

Attractor.gif 从图中看出,经过Attractor影响器的粒子改变了运动方向,试图向散发引力的点飞去。

Friction

摩擦力与粒子的当前速度成正比,此元素给粒子施加摩擦力。

属性类型描述
factorreal对粒子施加的阻力大小
thresholdreal拖动只适用于速度高于阈值速度的对象。施加的阻力将使对象下降到阈值速度,但不会进一步。默认阈值为0

代码示例

此处代码设置了Friction影响器,运动速度超过每秒10像素的粒子都将会被施加阻力。

        Friction {
            anchors.fill: parent; system: particles
            factor: 3
            threshold: 10
        }

效果展示

Friction.gif

Gravity

在一个角度上施加加速度。该元素将所有受影响的粒子加速到指定角度的指定大小的矢量。如果角度和加速度没有变化,在发射器上设置指定的加速度会更有效。这一元素模拟了一个重心较远的大型物体的引力(因此整个场景的引力是恒定的)。要对场景附近或内部的物体进行重力建模,可以使用PointAttractor。

属性类型描述
anglereal加速度角度
magnitudereal物体将被加速的像素/秒

代码示例

此处将Gravity影响器中角度属性设置为30°,加速度设置为每秒30000像素。

        Gravity {
            anchors.fill: parent; system: particles
            magnitude: 30000; angle: 30;
        }

效果展示

Gravity.gif 图中经过矩形块的粒子角度被改变,与x轴呈30°运动。这里的30°指的是以屏幕坐标来说的,屏幕坐标的x轴为从左到右,y轴为从上到下。