QML动画--ParticleSystem
ParticleSystem
是 QML 中用于创建和管理粒子系统的组件,可以制作各种粒子效果如火焰、烟雾、爆炸等。
基本用法
qml
import QtQuick.Particles 2.15ParticleSystem {id: particleSystemImageParticle {source: "particle.png"color: "red"alpha: 0.5}Emitter {anchors.centerIn: parentemitRate: 100lifeSpan: 2000size: 16velocity: AngleDirection { angle: 0; angleVariation: 360; magnitude: 100 }}
}
主要属性
属性 | 类型 | 描述 | 默认值 |
---|---|---|---|
running | bool | 是否运行 | true |
paused | bool | 是否暂停 | false |
empty | bool | 是否没有活动粒子 | 只读 |
particleStates | list<string> | 可用粒子状态列表 | 只读 |
system | ParticleSystem | 所属粒子系统 (用于分组) | null |
方法
方法 | 参数 | 描述 |
---|---|---|
start() | - | 启动粒子系统 |
stop() | - | 停止粒子系统 |
pause() | - | 暂停粒子系统 |
restart() | - | 重新启动粒子系统 |
reset() | - | 重置粒子系统 |
clear() | - | 清除所有粒子 |
setState(stateName) | string | 设置粒子状态 |
takeSnapshot() | - | 返回当前粒子的快照 |
信号
信号 | 描述 |
---|---|
started() | 系统启动时触发 |
stopped() | 系统停止时触发 |
paused() | 系统暂停时触发 |
emptied() | 系统变空时触发 |
核心组件
1. ImageParticle (粒子渲染)
qml
ImageParticle {source: "particle.png"color: "#FF0000"alpha: 0.8size: 16sizeVariation: 4
}
2. Emitter (粒子发射器)
qml
Emitter {id: emitterwidth: 10; height: 10emitRate: 50lifeSpan: 1000size: 16velocity: AngleDirection {angle: 270angleVariation: 45magnitude: 100}
}
3. Affector (粒子影响器)
qml
Gravity {anchors.fill: parentmagnitude: 100angle: 90
}
使用示例
1. 火焰效果
qml
ParticleSystem {ImageParticle {source: "particle.png"color: "#FF6600"colorVariation: 0.3alpha: 0.5}Emitter {emitRate: 100lifeSpan: 1000size: 24sizeVariation: 8velocity: AngleDirection {angle: 270angleVariation: 30magnitude: 50magnitudeVariation: 20}acceleration: PointDirection {y: -50xVariation: 10}}
}
2. 爆炸效果
qml
ParticleSystem {ImageParticle {source: "sparkle.png"colorVariation: 0.8}Emitter {id: explosionemitRate: 5000lifeSpan: 500size: 32sizeVariation: 16velocity: AngleDirection {angleVariation: 360magnitude: 200magnitudeVariation: 100}enabled: false}Timer {interval: 2000running: trueonTriggered: explosion.burst(5000)}
}
完整示例
import QtQuick 2.15
import QtQuick.Particles 2.15
import QtQuick.Controls 2.15ApplicationWindow {width: 800height: 600visible: truetitle: "QML粒子系统完整示例"color: "#222222"// 主粒子系统ParticleSystem {id: particleSystemrunning: true// 1. 火焰粒子ImageParticle {id: flameParticlegroups: ["flame"]source: "qrc:/particle.png"color: "#FF9900"colorVariation: 0.3alpha: 0.6size: 24sizeVariation: 8entryEffect: ImageParticle.Scale}Emitter {id: flameEmittergroup: "flame"anchors.bottom: parent.bottomanchors.horizontalCenter: parent.horizontalCenterwidth: 120height: 40emitRate: 150lifeSpan: 1200size: 28sizeVariation: 10velocity: AngleDirection {angle: 270angleVariation: 30magnitude: 80magnitudeVariation: 30}acceleration: PointDirection {y: -40xVariation: 20}}// 2. 烟雾粒子ImageParticle {id: smokeParticlegroups: ["smoke"]source: "qrc:/smoke.png"color: "#AAAAAA"alpha: 0.3alphaVariation: 0.2size: 60sizeVariation: 30entryEffect: ImageParticle.Fade}Emitter {id: smokeEmittergroup: "smoke"anchors.bottom: parent.bottomanchors.horizontalCenter: parent.horizontalCenterwidth: 120height: 40emitRate: 30lifeSpan: 2000size: 40sizeVariation: 20velocity: AngleDirection {angle: 270angleVariation: 15magnitude: 40magnitudeVariation: 10}acceleration: PointDirection {y: -20xVariation: 10}}// 3. 爆炸粒子ImageParticle {id: explosionParticlegroups: ["explosion"]source: "qrc:/sparkle.png"color: "#FFFF00"colorVariation: 0.8alpha: 0.8size: 16sizeVariation: 8}Emitter {id: explosionEmittergroup: "explosion"emitRate: 0lifeSpan: 800size: 24sizeVariation: 12velocity: AngleDirection {angleVariation: 360magnitude: 300magnitudeVariation: 150}enabled: false}// 4. 重力影响器Gravity {anchors.fill: parentmagnitude: 100angle: 90}// 5. 粒子年龄影响器Age {anchors.fill: parentadvancePosition: truelifeLeft: 1000}}// 交互控制面板Rectangle {anchors.bottom: parent.bottomwidth: parent.widthheight: 120color: "#40000000"radius: 10Column {anchors.centerIn: parentspacing: 10Row {spacing: 20Button {text: particleSystem.running ? "暂停系统" : "启动系统"onClicked: particleSystem.running ? particleSystem.pause() : particleSystem.start()}Button {text: "创建爆炸"onClicked: {explosionEmitter.burst(500);explosionEmitter.x = Math.random() * (parent.parent.width - 100);explosionEmitter.y = Math.random() * (parent.parent.height - 100);}}Button {text: "清除粒子"onClicked: particleSystem.clear()}}Row {spacing: 20Slider {id: flameSliderwidth: 200from: 0to: 300value: 150onValueChanged: flameEmitter.emitRate = value}Text {text: "火焰密度: " + flameSlider.value.toFixed(0)color: "white"anchors.verticalCenter: parent.verticalCenter}}Row {spacing: 20Slider {id: smokeSliderwidth: 200from: 0to: 100value: 30onValueChanged: smokeEmitter.emitRate = value}Text {text: "烟雾密度: " + smokeSlider.value.toFixed(0)color: "white"anchors.verticalCenter: parent.verticalCenter}}}}// 状态指示器Text {anchors.top: parent.topanchors.right: parent.rightanchors.margins: 10text: "粒子数: " + particleSystem.particleCountcolor: "white"font.pixelSize: 16}
}
性能优化建议
-
合理设置 emitRate 和 lifeSpan 避免过多粒子
-
使用简单的粒子图像
-
当粒子不可见时暂停系统
-
复用粒子系统而不是创建新的
-
使用 GroupGoal 管理粒子状态
注意事项
-
需要导入 QtQuick.Particles 模块
-
粒子系统会消耗较多GPU资源
-
复杂的粒子效果可能需要组合多个发射器和影响器
-
在移动设备上要注意性能问题
相关文章:
QML动画--ParticleSystem
ParticleSystem 是 QML 中用于创建和管理粒子系统的组件,可以制作各种粒子效果如火焰、烟雾、爆炸等。 基本用法 qml import QtQuick.Particles 2.15ParticleSystem {id: particleSystemImageParticle {source: "particle.png"color: "red"a…...
Win 11 重装 Ubuntu 双系统方法
有时候 Ubuntu 环境崩溃了,或者版本过低,需要卸载重装。本文介绍重装的方法,默认已经有一个双系统。 1. 删除原先 Ubuntu 分区 首先打开 Win 的磁盘管理,找到 Ubuntu 的分区,右键删除分区(注意不要错删 wi…...
单例模式:懒汉式的两种优化写法
单例模式:全局唯一实例 懒汉式:获取时才初始化 ①静态局部变量实现(Meyer’s Singleton)【推荐】 /* 类内创建自身实例的可行性分析:在C中,类可以通过静态成员函数创建自身实例。这种机制的核心在于&…...
详细解释浏览器是如何渲染页面的?
渲染流程概述 渲染的目标:将HTML文本转化为可以看到的像素点 当浏览器的网络线程收到 HTML 文档后,会产生一个渲染任务,并将其传递给渲染主线程的消息队列。在事件循环机制的作用下,渲染主线程取出消息队列中的渲染任务࿰…...
高速系统设计简介
1.1 PCB 设计技术回顾 1981 年 8 月 12 日,IBM 正式发布了历史上第一台个人电脑,自此之后,个人电脑融入了人们生活和工作的各个角落,人类从此进入了个人电脑时代。个人电脑的出现,不仅促进了电子产品在消费领域的发展…...
不规则曲面上两点距离求取
背景 在CT中求皮肤上两点间的弧长。由于人体表面并不是规则的曲面,不可能用圆的弧长求取方法来计算出两点间的弧长。 而在不规则的曲面上求两点的距离,都可以用类似测地线距离求取的方式来求取(积分),而转化为搜索路…...
用usb网卡 虚拟机无法开到全双工的解决办法
今天突发奇想 给unraid宿主机插了两个一摸一样的usb网卡 2.5g的 直通给不同的虚拟机 这里unraid需要安装"USB Manager" 请给unraid自备环境 直通的时候 第一次还没生效 看不到网卡 我又在unraid的管理界面 顶部可以看到多出来一个 "usb"页面 打开可…...
webpack 中 chunks详解
webpack 中 chunks详解 在 Webpack 项目中,webpack.config.js 是核心配置文件,而非 webpack.json。chunks 的概念与 Webpack 的代码分割(Code Splitting)功能密切相关,通过 optimization.splitChunks 配置项可以实现对…...
Java @Serial 注解深度解析
Java Serial 注解深度解析 1. 注解本质 Serial 是 Java 14 引入的编译时校验注解,用于标记序列化相关成员,帮助开发者避免常见的序列化错误。 2. 核心作用 (1) 主要用途 标记序列化相关的特殊方法/字段 提供编译时检查 替代传统的命名约定验证 (…...
齐次坐标变换+Unity矩阵变换
矩阵变换 变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过某种方式(矩阵运算),进行转换的过程。 变换类型 线性变换:保留矢量加和标量乘的计算 f(x)…...
Python语法系列博客 · 第9期[特殊字符] 函数参数进阶:*args、**kwargs 与参数解包技巧
上一期小练习解答(第8期回顾) ✅ 练习1:整数转字符串列表 nums [1, 2, 3, 4, 5] str_list list(map(str, nums))✅ 练习2:筛选回文字符串 words ["madam", "hello", "noon", "python&qu…...
Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块
上一期小练习解答(第3期回顾) ✅ 练习1:创建一个列表,添加5个名字,并用循环打印 names ["Alice", "Bob", "Charlie", "David", "Eva"] for name in names:print…...
6547网:2025年3月 Python编程等级考试一级真题试卷
2025年3月青少年软件编程Python等级考试(一级)真题试卷 题目总数:37 总分数:100 选择题 第 1 题 单选题 下列哪个软件不能运行Python程序?( ) A.JupyterNotebook B.Pycharm C.原版…...
微前端框架Module Federation
以下是 Module Federation 的核心知识点,并结合微前端架构的设计思想,帮助我们构建完整的知识体系: 一、Module Federation 基础概念 1. 什么是 Module Federation? 定义:Webpack 5 引入的一项革命性功能,允许在运行时动态加载其他独立构建的应用模块(微前端),实现跨…...
AUTOSAR图解==>AUTOSAR_SWS_IntrusionDetectionSystemManager
AUTOSAR 入侵检测系统管理器 (IdsM) 详解 AUTOSAR安全框架的核心组件 1. 概述 AUTOSAR 入侵检测系统管理器(Intrusion Detection System Manager, IdsM)是AUTOSAR标准中安全防护框架的关键组成部分,专门负责处理车载安全事件。IdsM模块提供了…...
Alan AI - 面向Web的生成式AI SDK
本文翻译整理自:https://github.com/alan-ai/alan-sdk-web 文章目录 一、关于 Alan AI相关链接资源关键功能特性Alan AI StudioAlan AI SDKAlan AI Cloud 二、为什么选择Alan AI?三、快速开始四、下载安装五、示例应用六、其他平台SDK七、获取帮助 一、关…...
递归下降 ll(1) 型文法 识别二元组文法分析
#include <stdio.h> #include <string.h>FILE* fp; FILE* fa2;char* str new char[1200]; // 循环读取文件,分200字节读取char* peek;// 表格 typedef struct table {char* sign;char* kind;char* message; } signtable;signtable* list; // 数…...
Qt unknown module(s) in qt:serialport解决方法
在Ubuntu和CentOS系统中,若使用Qt时遇到Unknown module(s) in QT: serialport错误,通常是由于未正确安装Qt的串口模块(QSerialPort)或项目配置不当导致。以下是针对两种系统的解决方案: 一、安装Qt串口模块 1. Ubuntu/Debian系列 安装开发包: 执行以下命令安装Qt5串口模…...
金融数学专题6 证券问题与资本利得税
一、固定利息证券 特点:利息固定,且可以在证券名字中体现。 发行价格:公司公开发行证券的价格。 固定利率证券通常在其名称中包括应付利率,例如,8% Treasury Stock 2021 或 5% Treasury Gilt 2018。每位持有人应得的年利息是通…...
XGBoost
XGBoost 假设一共有 m m m个基模型,分别为 f 1 ( x ) , f 2 ( x ) , … , f m ( x ) f_1(x),f_2(x),\dots,f_m(x) f1(x),f2(x),…,fm(x), n n n个样本, x 1 , x 2 , … , x n x_1,x_2,\dots,x_n x1,x2,…,xn,则XGBoo…...
Kubernetes 多主多从集群部署完整文档
好久不见呀!今天给大家整点干货尝尝(其实是自己的总结),主打的就是全程无尿点。 Kubernetes 多主多从集群部署完整文档 1. 机器列表 PS: master,lb,nfs机器均为CentOS 7,其他为Ubuntu 22.04 L…...
使用Spring Validation实现参数校验
引入Spring Validation 起步依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>参数校验失败异常处理 所有的http请求异常都会被拦截处理 exception…...
用思维导图解锁计算机科学导论的知识宝库
引言 在计算机科学的浩瀚海洋中,“计算机科学导论” 如同开启宝藏的钥匙,是众多学习者踏入这片领域的第一步。今天,我将借助思维导图这一强大工具,带大家梳理计算机科学导论的关键知识点,同时也希望能为大家在学习的道…...
软件架构分层策略对比及Go项目实践
一、水平分层 vs 功能划分 vs 组件划分 维度水平分层功能划分组件划分核心思想按垂直层次划分职责(如表示层、业务层、数据层)按业务功能模块划分(如用户管理、订单服务、支付模块)按技术或业务能力划分独立组件(如数…...
Python学习之Seaborn
Python学习之Seaborn 如果说Matplotlib试图让简单的事情变得容易,让困难的事情成为可能,那么Seaborn试图让一组定义明确的复杂的事情变得简单. Seaborn是在Matplotlib的基础上开发的高级可视化库, 它更专注于数据可视化的美学设计和统计图形的绘制. Matplotlib需要大量的代码创…...
【树莓派Pico FreeRTOS】-中断服务与二值信号量
中断服务与二值信号量 RP2040 由 Raspberry Pi 设计,具有双核 Arm Cortex-M0+ 处理器和 264KB 内部 RAM,并支持高达 16MB 的片外闪存。 广泛的灵活 I/O 选项包括 I2C、SPI 和独特的可编程 I/O (PIO)。 FreeRTOS 由 Real Time Engineers Ltd. 独家拥有、开发和维护。FreeRTO…...
QT采用cmake编译时文件解析
CMakeLists.txt # 设置版本要求 cmake_minimum_required(VERSION 3.16) # 设置项目名 project(QtWidgetsApplication3 LANGUAGES CXX)#设置C版本 set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) fi…...
代码随想录背包问题完结
322. 零钱兑换 视频讲解:动态规划之完全背包,装满背包最少的物品件数是多少?| LeetCode:322.零钱兑换_哔哩哔哩_bilibili 代码随想录 该题在递推公式部分和474.一和零一样,求装多少个 不同在于 该题是完全背包&a…...
Java 内存优化:如何避免内存泄漏?
Java 内存优化:如何避免内存泄漏? 在 Java 开发中,内存管理是一个至关重要的主题。尽管 Java 拥有自动垃圾回收机制,但这并不意味着开发人员可以忽视内存管理。内存泄漏是一个常见的问题,如果不加以控制,可…...
数量关系 多级数列1
机械划分 真看不出来 无明显关系 后减前作差 分数数列 无规律 作乘 作积 太复杂啦 太复杂啦...
【AI提示词】物理学家
提示说明 物理学家是为那些希望深入了解物理学原理、探索宇宙奥秘或进行科学实验的用户设计的。这个专家能够提供精确的物理学概念解释、复杂的理论分析以及实验设计建议。 提示词 # 角色 物理学家## 注意 1. 物理学家专家应具备深厚的物理学知识和对科学探究的热情。 2. 专…...
黑马点评秒杀优化
异步优化秒杀业务 回顾之前的内容黑马点评 秒杀优惠券集群下一人一单超卖问题-CSDN博客,为了处理并发情况下的线程安全和数据一致性的问题,我们已经完成了查询优惠券信息、判断秒杀是否开始和结束、检查库存、用户ID加锁、创建订单和扣减库存。 尽管之前…...
宇树机器狗go2—slam建图(1)点云格式
0.前言 上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动,本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道…...
支持中文对齐的命令行表格打印python库——tableprint
文章目录 快速入门 还在为表格中含有中文,命令行打印无法对齐而苦恼吗? 还在为冗长的数据添加代码而抓狂吗? tableprint来了!!!,它完美的解决了上述两个问题,快来试试吧!…...
力扣-hot100(无重复字符的最长子串)
3. 无重复字符的最长子串 中等 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。暴力直观解法一࿱…...
javaNIO详解
Java NIO(Non-blocking I/O)详解 Java NIO(New I/O)是 Java 1.4 引入的高性能 I/O 框架,相比传统的 BIO(Blocking I/O),它提供了非阻塞、多路复用、零拷贝等能力,适用于…...
高精度算法(加、减、乘、除、阶乘和)
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 唯有主动付出,才有丰富的果…...
在复杂性的迷宫里寻找路标 —— 读《人月神话》有感
初读《人月神话》时,正值参与的第一个大型项目陷入泥潭:需求像不断膨胀的气球,团队规模从 10 人扩充到 30 人,进度却像被灌了铅的钟表,指针越来越沉重。布鲁克斯在书中写下的 "向进度落后的项目增加人力ÿ…...
OpenFeign终极指南:超时控制、重试策略、拦截器与自定义Starter
目录 前言 使用 引入依赖 开启feign 编写feign客户端 效果 日志 超时配置 重试机制 拦截器 Fallback兜底返回 引入依赖 编写兜底实现 连接池 引入依赖 开启连接池 制作OpenFeign Starter 编写配置类 自动装配 前言 在RPC框架中,有openFeign和Du…...
如何使用flatten函数在Terraform 中迭代嵌套map
简介 flatten 接受一个列表,并用列表内容的扁平序列替换列表中的任何元素。 > flatten([["a", "b"], [], ["c"]]) ["a", "b", "c"] > flatten([[["a", "b"], []], [&quo…...
数字电子技术基础(五十)——硬件描述语言简介
目录 1 硬件描述语言简介 1.1 硬件描述语言简介 1.2 硬件编程语言的发展历史 1.3 两种硬件描述的比较 1.4 硬件描述语言的应用场景 1.5 基本程序结构 1.5.1 基本程序结构 1.5.2 基本语句和描述方法 1.5.3 仿真 1 硬件描述语言简介 1.1 硬件描述语言简介 硬件描述语…...
【PCIE配置空间】
1 PCIE配置空间 1.1 软件如何知道PCIE设备是Swith,RC还是EP? –软件通过读取寄存器信息。 PCIE配置空间• PCIE寄存器;--PCIE配置协议规定必须实现的空间。--PCIE存在两种配置空间Type0/Type1;--Type0配置空间EP设备必须实现;-…...
Python爬虫实战:获取网易新闻数据
一、引言 随着互联网的飞速发展,网络上蕴含着海量的信息资源。新闻数据作为其中的重要组成部分,对于舆情分析、市场研究、信息传播等多个领域具有重要价值。网易新闻作为国内知名的新闻平台,拥有丰富多样的新闻内容。使用 Python 的 Scrapy 框架进行网易新闻数据的爬取,可…...
哲学家就餐问题(避免死锁)
解决方案: 策略:奇偶哲学家拿筷子顺序不同,破坏循环等待。 流程: 偶数哲学家先左后右。 奇数哲学家先右后左。 分析: 无死锁,哲学家交替进餐,不同拿筷顺序避免循环等待。 实验总结 遇到的…...
下采样(Downsampling)
目录 1. 下采样的定义与作用 2. 常见下采样方法 (1) 池化(Pooling) (2) 跨步卷积(Strided Convolution) (3) 空间金字塔池化(SPP) 3. PyTorch 实现示例 …...
OrbisGIS:基于Java开发的开源GIS软件
大家好,今天为大家介绍的软件是OrbisGIS:一款基于JAVA开发的开源的地理信息系统软件。下面,我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 OrbisGIS官网网址为:http://orbisgis.org/,Orbis…...
linux socket编程之udp(实现客户端和服务端消息的发送和接收)
目录 一.创建socket套接字(服务器端) 二.bind将prot与端口号进行绑定(服务器端) 2.1填充sockaddr_in结构 2.2bind绑定端口 三.直接通信(服务器端) 3.1接收客户端发送的消息 3.2给客户端发送消息 四.客户端通信 4.1创建socket套接字 4.2客户端bind问题 4.3直接通信即可…...
八大排序之直接插入排序
今天我们来学习八大排序中的直接插入排序。话不多说,直接上动图。 直接插入排序的主要思想是:当数组只有一个元素的时候,我们可以认为该数组是有序的。所以我们可以选择一个元素放进数组(一般为待排数据的第一个元素)…...
二级评论列表-Java实现
二级评论列表是很常见的功能,文章记录了新手用Java实现的具体逻辑。 整体实现逻辑是先用2个sql,分别查出两层数据。然后用java在service中实现数据组装,返给前端。这种实现思路好处是SQL简洁,逻辑分明,便于维护。 一…...
如何基于区块链进行虚拟电厂运营平台建设?
本项目旨在基于区块链技术建设虚拟电厂运营平台,以提升省内大用户及工业企业和工业园区的需求响应能力,优化能源结构配置,并推动能源交易、需求响应和现货交易等新型业态的发展。通过建设虚拟电厂,项目将实现工业企业及园区各供用…...