QML 粒子系统之Affector

article/2025/7/13 11:41:18

目录

    • 基本示例
    • Affector
      • Age - 改变特定年龄粒子的属性
      • Attractor - 吸引粒子到指定点
      • Friction - 施加摩擦力
      • Gravity - 模拟重力
      • Wander - 随机游走效果
      • Turbulence - 添加湍流效果
    • 下载链接

接上篇QML 粒子系统 (雪花飘落、爆炸粒子效果),本文继续研究粒子系统中的附属效果。


基本示例

首先展示一个基本示例作为参照,后续逐步展示设置影响器带来的效果。

import QtQuick
import QtQuick.ParticlesRectangle {width: 400height: 400color: "black"ParticleSystem {id: particleSystemanchors.fill: parent// 粒子绘制器 - 使用图片绘制粒子ImageParticle {source: "qrc:/images/star.png"color: "#FFFFFF"alpha: 0.4}// 粒子发射器Emitter {id: emittersystem: particleSystemheight: parent.height/4width: 1anchors.left: parent.left// 发射速率 (每秒粒子数)emitRate: 120// 粒子生命周期 (毫秒)lifeSpan: 2400// 粒子大小size: 16sizeVariation: 8// 粒子速度velocity: PointDirection { x: 100 ; xVariation: 50 }// 粒子加速度acceleration: PointDirection { x: 20 }}}
}

运行效果:

这段代码实现了一个在黑色背景矩形中,从左侧边缘以每秒 120 个的速率发射带透明度的星形图片粒子,粒子具有变化的大小、向右的速度和加速度,生命周期为 2400 毫秒的粒子系统效果。没有设置Affector时:

请添加图片描述


Affector

在粒子生命周期中影响其行为。常用影响器类型:

Age - 改变特定年龄粒子的属性

参考:https://doc.qt.io/qt-6/qml-qtquick-particles-age.html

  • Age 效果器可改变粒子在生命周期中的状态。其常见用途是让粒子提前结束生命周期,这样它们可能有时间以动画形式淡出。
  • Age 效果器有时也被称为 “销毁” 效果器,因为在默认参数下,它会立即结束所有受影响粒子的生命周期。
  • Age 效果器仅适用于仍存活的粒子。

属性解释:

advancePosition(推进位置)参数用于决定粒子的位置、速度和加速度是否纳入效果器模拟的老化计算中。

  • 若advancePosition为false,则粒子的位置、速度和加速度将保持不变,仅其他属性(如不透明度)会在模拟中按粒子生命周期的对应阶段正常变化;
  • 若advancePosition为true,粒子的位置、速度和加速度也会按生命周期的对应阶段正常推进,使其在屏幕上的位置随模拟进程移动。

示例:

Age {system: particleSystemadvancePosition: truelifeLeft: 500once: true
}

请添加图片描述


Attractor - 吸引粒子到指定点

参考:https://doc.qt.io/qt-6/qml-qtquick-particles-attractor.html

与其他效果器一样,吸引器(Attractor)具有表示影响区域的标准属性:x、y、宽度和高度。吸引器项目的大小和位置决定了受影响的粒子。吸引点的大小始终为0x0,其位置由pointX和pointY属性指定。

affectedParameter:枚举类型

常量说明
Attractor.Position位置
Attractor.Velocity速度
Attractor.Acceleration加速度

pointX: 吸引点的 x 坐标,相对于吸引器项目的 x 坐标。

pointY: 吸引点的 y 坐标,相对于吸引器项目的 y 坐标。

proportionalToDistance:枚举类型

常量说明
Attractor.Constant恒定(与距离无关)
Attractor.Linear线性(与距离成正比)
Attractor.InverseLinear反线性(与距离成反比)
Attractor.Quadratic二次方(与距离平方成正比)
Attractor.InverseQuadratic反二次方(与距离平方成反比)

strength属性

  • 对距离 1 像素的对象施加的拉力(单位:单位 / 秒)。
  • 拉力强度与proportionalToDistance属性共同决定对一定距离内粒子的实际拉力大小。

示例:

Attractor {affectedParameter: Attractor.PositionproportionalToDistance: Attractor.LinearpointX: 400pointY: 400strength: 0.3
}

运行效果:

将粒子的位置作为目标属性,向坐标 (400, 400) 处的吸引点产生线性强度的吸引力,强度为 0.3。
请添加图片描述


Friction - 施加摩擦力

参考:https://doc.qt.io/qt-6/qml-qtquick-particles-friction.html

factor属性:

将根据运动物体当前速度的该系数对其施加阻力。

threshold属性:

阻力仅适用于速度高于阈值速度的物体。所施加的阻力会使物体的速度降至阈值速度,但不会进一步降低。默认阈值为 0。

示例:

Friction {factor: 0.8threshold: 10
}

运行效果:

请添加图片描述


Gravity - 模拟重力

参考:https://doc.qt.io/qt-6/qml-qtquick-particles-gravity.html

该元素会将所有受影响的粒子加速至具有指定大小和指定角度的矢量方向。如果角度和加速度不变,在发射器上设置指定的加速度会更高效。
此元素模拟重心位于远处的大质量物体的重力(因此重力在整个场景中实际上是恒定的)。若要模拟场景附近或内部物体的重力,请使用 “PointAttractor”。

angle属性: 加速度角度。
magnitude属性: 物体将被加速的每秒像素数。

示例:

Gravity {angle: 90magnitude: 100
}

请添加图片描述


Wander - 随机游走效果

参考:https://doc.qt.io/qt-6/qml-qtquick-particles-wander.html

pace属性: 每秒最大属性变化量
xVariance属性: 最大属性x值。
yVariance属性: 最大属性y值。

示例:

Wander {yVariance: 100pace: 200
}

请添加图片描述


Turbulence - 添加湍流效果

参考:https://doc.qt.io/qt-6/qml-qtquick-particles-turbulence.html

湍流元素会在其影响的区域内缩放噪波源,并使用该源的卷曲度生成力矢量。
湍流需要固定大小。与其他影响器不同,0x0尺寸的湍流元素不会对任何粒子产生影响。
噪波源应是相对平滑的黑白噪波(如柏林噪波)。

noiseSource属性:

噪声来源,用于生成湍流的源图像。该图像将被缩放到元素的大小,因此尺寸等于或大于元素尺寸会产生更好的效果。调整此图像是调整涡流位置或数量等行为的唯一方法。 源图像应是相对平滑的黑白噪波图像(如柏林噪波)。如果未提供图像,则会使用默认图像。

strength属性:

任意点的速度矢量大小在0到√2之间变化。该值随后将乘以强度值,从而得到受湍流影响的粒子的每秒速度。

示例:

Turbulence {anchors.horizontalCenter: parent.horizontalCenterwidth: 120; height: 120system: particleSystemstrength: 100
}

此代码定义了一个居中的、120×120像素的湍流区域,强度为100,用于影响particleSystem中的粒子,使其产生复杂的不规则运动效果。

请添加图片描述


下载链接

GitCode 粒子系统示例

在这里插入图片描述


http://www.hkcw.cn/article/sVKBwLkdnU.shtml

相关文章

Mac 同时录制系统声音和麦克风声音(OBS + BlackHole 免费版)

🎬 一、你将实现的目标 ✅ 用 OBS 免费录制屏幕时,能同时录到: 🖥 系统播放的声音(比如视频、PPT音效、背景音乐) 🎙 你的麦克风说话声音(讲解或旁白) 🧰…

Pytorch知识点2

Pytorch知识点 1、官方教程2、张量🧱 0、数组概念🧱 1. 创建张量📐 2. 张量形状与维度🔢 3. 张量数据类型➗ 4. 张量的数学与逻辑操作🔄 5. 张量的就地操作📦 6. 复制张量🚀 7. 将张量移动到加速…

使用pandas实现合并具有共同列的两个EXCEL表

表1&#xff1a; 表2&#xff1a; 表1和表2&#xff0c;有共同的列“名称”&#xff0c;而且&#xff0c;表1的内容&#xff08;行数&#xff09;<表2的行数。 目的&#xff0c;根据“名称”列的对应内容&#xff0c;将表2列中的“所处行业”填写到表1相应的位置。 实现代…

【农资进销存专用软件】佳易王农资进出库管理系统:赋能农业企业高效数字化管理

一、软件概述与核心优势 &#xff08;一&#xff09;试用版获取方式 资源下载路径&#xff1a;进入博主头像主页第一篇文章末尾&#xff0c;点击卡片按钮&#xff1b;或访问左上角博客主页&#xff0c;通过右侧按钮获取详细资料。 说明&#xff1a;下载文件为压缩包&#xff…

深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言

** 深入理解AMBA总线&#xff08;七&#xff09;AHB设计要点和AHB2APB同步桥设计前言 ** 前面的几篇文章介绍了AHB-lite协议。主要内容其实就是文档的介绍加上我自己的一些理解&#xff0c;希望对大家有帮助。今天这篇文章将带来AHB设计需要注意的一些事项&#xff0c;然后带…

消除F/1噪声

目录 简介 如何测量及规定1/f噪声&#xff1f; 1/f噪声对电路有何影响&#xff1f; 如何消除或降低1/f噪声&#xff1f; 简介 本文阐释1/f噪声是什么&#xff0c;以及在精密测量应用中如何降低或消除该噪声。1/f噪声无法被滤除&#xff0c;在精密测量应用中它可能是妨碍实…

洛谷-P3912素数个数题解

P3912 素数个数 题目描述 求 1 , 2 , ⋯ , N 1,2,\cdots,N 1,2,⋯,N 中素数的个数。 输入格式 一行一个整数 N N N。 输出格式 一行一个整数&#xff0c;表示素数的个数。 输入输出样例 #1 输入 #1 10输出 #1 4说明/提示 对于 40 % 40\% 40% 的数据&#xff0c; …

【环境搭建】Java、Python、Nodejs等开发环境搭建

1. 前言 趁着 618 活动&#xff0c;我新换了一台电脑。开发的同学都知道&#xff0c;重新在新电脑搭建开发环境是一件相对繁琐的事&#xff0c;这篇文章我将介绍如何搭建Java&#xff08;jdk、maven等&#xff09;、Python&#xff08;uv、conda等&#xff09;、Nodejs、Docke…

【机器学习基础】机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法)

机器学习入门核心算法&#xff1a;层次聚类算法&#xff08;AGNES算法和 DIANA算法&#xff09; 一、算法逻辑二、算法原理与数学推导1. 距离度量2. 簇间距离计算&#xff08;连接标准&#xff09;3. 算法伪代码&#xff08;凝聚式&#xff09; 三、模型评估1. 内部评估指标2. …

设计模式——迭代器设计模式(行为型)

摘要 本文详细介绍了迭代器设计模式&#xff0c;这是一种行为型设计模式&#xff0c;用于顺序访问集合对象中的元素&#xff0c;同时隐藏集合的内部结构。文章首先定义了迭代器设计模式并阐述了其核心角色&#xff0c;包括迭代器接口、具体迭代器、容器接口和具体容器。接着&a…

【文献阅读】Learning Transferable Visual Models From Natural Language Supervision

摘要 最先进的计算机视觉系统经过训练&#xff0c;可预测一组固定的预先确定的对象类别。这种受限的监督形式限制了它们的通用性和可用性&#xff0c;因为指定任何其他视觉概念都需要额外的标记数据。 直接从关于图像的原始文本中学习是一种很有前途的替代方法&#xff0c;它…

字符函数和字符串函数

目录 1.字符分类函数 2.字符转换函数 3.strlen函数的使用和模拟实现 4.strcpy函数的使用和模拟实现 5.strcat函数的使用和模拟实现 6.strcmp函数的使用和模拟实现 7.strcnpy函数的使用和模拟实现 8.strcnat函数的使用和模拟实现 9.strncmp函数的使用 10.strstr的函数使…

苹果电脑深度清理,让老旧Mac重焕新生

在日常使用苹果电脑的过程中&#xff0c;随着时间推移&#xff0c;系统内会积累大量冗余数据&#xff0c;导致电脑运行速度变慢、磁盘空间紧张。想要让设备恢复流畅&#xff0c;苹果电脑深度清理必不可少。那么&#xff0c;如何进行苹果电脑深度清理呢&#xff1f;接下来为你详…

android binder(1)基本原理

一、IPC 进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;机制&#xff0c;用于解决不同进程间的数据交互问题。 不同进程之间用户地址空间的变量和函数是不能相互访问的&#xff0c;但是不同进程的内核地址空间是相同和共享的&#xff0c;我们可…

2025年ESWA SCI1区TOP,改进成吉思汗鲨鱼算法MGKSO+肝癌疾病预测,深度解析+性能实测

1.摘要 本文针对肝癌&#xff08;HCC&#xff09;早期诊断难题&#xff0c;提出了一种基于改进成吉思汗鲨鱼优化算法&#xff08;MGKSO&#xff09;的计算机辅助诊断系统。由于HCC在早期症状不明显且涉及高维复杂数据&#xff0c;传统机器学习方法易受噪声和冗余特征干扰。为提…

性能测试实例(http和ldap协议压测)

一、某授权服务器生成授权码效率验证&#xff08;http协议&#xff09; 测试背景 在存量数据23万条的情况下&#xff0c;生成一条授权数据&#xff0c;需要10秒左右&#xff0c;用户反应数据生成效率太差&#xff0c;需要优化。初步判断是由于在授权数据生成时&#xff0c;有查…

解锁设计师创意魔法:Onlook赋能你的Web创作

在数字时代的今天&#xff0c;设计和开发的界限正在逐步模糊。无论是经验丰富的程序员&#xff0c;还是初出茅庐的设计师&#xff0c;能在统一的环境中高效实现创意是任何设计工具的理想。而Onlook&#xff0c;不仅是一个开源的视觉编码编辑器&#xff0c;更是一座连接设计与开…

智慧零工平台前端开发实战:从uni-app到跨平台应用

智慧零工平台前端开发实战:从uni-app到跨平台应用 本文将详细介绍我如何使用uni-app框架开发一个支持微信小程序和H5的零工平台前端应用,包含技术选型、架构设计、核心功能实现及部署经验。 前言 在当今移动互联网时代,跨平台开发已成为提高开发效率的重要手段。本次我选择…

用go从零构建写一个RPC(4)--gonet网络框架重构+聚集发包

在追求高性能的分布式系统中&#xff0c;RPC 框架的底层网络能力和数据传输效率起着决定性作用。经过几轮迭代优化&#xff0c;我完成了第四版本的 RPC 框架。相比以往版本&#xff0c;这一版本的最大亮点在于 重写了底层网络框架 和 实现了发送端的数据聚集机制&#xff0c;这…

云服务器突发宕机或无响应怎么办

当云服务器突发宕机或无响应时&#xff0c;需快速定位问题并恢复服务。以下是分步骤的解决方案&#xff1a; 1. 初步确认问题 检查网络连接 本地网络是否正常&#xff1f;尝试 ping 其他网站 排除本地问题。 使用 ping <服务器IP> 或 traceroute <IP> 测试网络连通…