news 2026/5/11 19:28:48

HarmonyOS 6 ArkUI 粒子动画(Particle)动态环形发射器使用文档

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS 6 ArkUI 粒子动画(Particle)动态环形发射器使用文档

文章目录

    • 核心功能
    • 代码结构与核心模块解析
      • 1 导入与变量定义
      • 2 动态发射器配置
      • 3 初始环形区域配置
      • 4 定时器自动旋转角度
      • 5 粒子组件主体配置
    • 运行效果
    • 完整代码
    • 总结

核心功能

  • 环形发射器(ANNULUS):粒子沿圆环区域生成
  • 动态角度更新:通过定时器每秒钟旋转发射扇形角度
  • 无限生命周期粒子lifetime: -1粒子永久存在
  • 状态驱动动态更新:使用@State+.emitter()实时修改发射器属性

代码结构与核心模块解析

1 导入与变量定义

import{LengthMetrics}from'@kit.ArkUI';@Entry@Componentstruct ParticleExample6{@Stateradius:number=1;@Stateshape:ParticleEmitterShape=ParticleEmitterShape.ANNULUS;@StateemitRate:number=200;@Statecount:number=4000;privatetimerID:number=-1;// 环形固定参数privatecenterX:LengthMetrics=LengthMetrics.percent(0.5);privatecenterY:LengthMetrics=LengthMetrics.percent(0.5);privateinRadius:LengthMetrics=LengthMetrics.vp(120);privateoutRadius:LengthMetrics=LengthMetrics.vp(120);// 动态旋转角度privatestartAngle:number=-90;privateendAngle:number=-60;}
  • LengthMetrics:用于百分比、vp 单位尺寸定义
  • centerX/Y: 0.5:粒子发射中心在容器正中心
  • 初始角度:-90° ~ -60°(时钟 12点 → 1点方向)

2 动态发射器配置

@StateemitterProperties:Array<EmitterProperty>=[{index:0,emitRate:100,annulusRegion:{center:{x:this.centerX,y:this.centerY},outerRadius:this.outRadius,innerRadius:this.inRadius,startAngle:this.startAngle,endAngle:this.endAngle}}]
  • index:0:绑定第一个粒子发射器
  • annulusRegion:动态更新环形发射区域
  • 角度可实时修改,实现旋转扫描效果

3 初始环形区域配置

@Stateregion:ParticleAnnulusRegion={center:{x:this.centerX,y:this.centerY},outerRadius:this.outRadius,innerRadius:this.inRadius,startAngle:-90,endAngle:-60}

用于粒子组件初始化时的默认环形区域。


4 定时器自动旋转角度

onPageShow():void{this.timerID=setInterval(()=>{// 更新发射器属性this.emitterProperties=[...]// 角度每秒 +30°this.startAngle+=30;this.endAngle+=30;// 旋转一周后停止if(this.endAngle>=360){clearInterval(this.timerID);}},1000);}
  • 每秒更新一次发射角度
  • 每次旋转30°
  • 旋转 360° 后自动停止定时器

5 粒子组件主体配置

Particle({particles:[{emitter:{particle:{type:ParticleType.POINT,config:{radius:this.radius},count:this.count,lifetime:-1// 无限生命周期},emitRate:this.emitRate,shape:this.shape,annulusRegion:this.region},color:{range:[Color.White,Color.Pink]}}]}).width('100%').height('100%').emitter(this.emitterProperties)// 绑定动态发射器
  • 粒子类型:圆点(POINT)
  • 粒子数量:4000(高密度效果)
  • 颜色:白色 → 粉色随机
  • 无限生命周期,形成累积效果

运行效果

  1. 页面显示黑色背景 300x300 区域
  2. 粒子从正中心圆环扇形区域发射
  3. 发射扇形每秒钟顺时针旋转30°
  4. 粒子永久存在,形成环形扫描/时钟转动视觉效果
  5. 旋转一周(360°)后自动停止
  6. 颜色:白、粉色随机,柔和美观

完整代码

import{LengthMetrics}from'@kit.ArkUI';@Entry@Componentstruct ParticleExample6{@Stateradius:number=1;@Stateshape:ParticleEmitterShape=ParticleEmitterShape.ANNULUS;// 圆环@StateemitRate:number=200;@Statecount:number=4000;privatetimerID:number=-1;privatecenterX:LengthMetrics=LengthMetrics.percent(0.5);privatecenterY:LengthMetrics=LengthMetrics.percent(0.5);privateinRadius:LengthMetrics=LengthMetrics.vp(120);privateoutRadius:LengthMetrics=LengthMetrics.vp(120);privatestartAngle:number=-90;// 时钟12点钟方向privateendAngle:number=-60;// 时钟1点钟方向// 粒子动画,环形发射器的更新参数设置@StateemitterProperties:Array<EmitterProperty>=[{index:0,emitRate:100,annulusRegion:{center:{x:this.centerX,y:this.centerY},// 圆环的圆心坐标outerRadius:this.outRadius,// 圆环的外圆半径innerRadius:this.inRadius,// 圆环的内圆半径startAngle:this.startAngle,// 圆环的起始角度endAngle:this.endAngle// 圆环的结束角度}}]// 创建的时候,环形发射器的初始设置@Stateregion:ParticleAnnulusRegion={center:{x:this.centerX,y:this.centerY},outerRadius:this.outRadius,innerRadius:this.inRadius,startAngle:-90,endAngle:-60}onPageShow():void{// 创建定时器(每秒更新)this.timerID=setInterval(()=>{this.emitterProperties=[{index:0,emitRate:this.emitRate,annulusRegion:{center:{x:this.centerX,y:this.centerY},outerRadius:this.outRadius,innerRadius:this.inRadius,startAngle:this.startAngle,endAngle:this.endAngle}}];if(this.endAngle>=360){if(this.timerID!=-1){clearInterval(this.timerID);}return;}// 更新角度值(30度/秒)this.startAngle+=30;this.endAngle+=30;console.info("angle: "+this.startAngle+", "+this.endAngle);},1000);}build(){Column({space:10}){Stack(){Text().width(300).height(300).backgroundColor(Color.Black)Particle({particles:[{emitter:{particle:{type:ParticleType.POINT,// 粒子类型config:{radius:this.radius// 圆点半径},count:this.count,// 粒子总数lifetime:-1// 粒子的生命周期,-1表示粒子生命周期无限大},emitRate:this.emitRate,// 每秒发射粒子数shape:this.shape,// 发射器形状annulusRegion:this.region},color:{range:[Color.White,Color.Pink],// 初始颜色范围},},]}).width('100%').height('100%').emitter(this.emitterProperties)}.width('100%').height('100%').align(Alignment.Center)}}}

运行效果如图:


总结

  1. 环形发射器
    shape: ParticleEmitterShape.ANNULUS

  2. 动态更新发射器
    使用.emitter(emitterProperties)实时修改角度、半径、发射速率

  3. 无限生命周期粒子
    lifetime: -1

  4. 角度旋转规则

    • -90°:时钟12点方向
    • 每帧 +30°,实现顺时针扫描
    • 360° 后自动停止
  5. LengthMetrics 单位
    用于跨设备适配:

    • percent(0.5):50% 居中
    • vp(120):120vp 半径

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是持续创作的动力

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 19:27:45

VASP+VTST编译实战:从源码到高效过渡态计算

1. 为什么需要VASPVTST组合&#xff1f; 在计算材料学领域&#xff0c;研究化学反应路径和材料相变过程时&#xff0c;过渡态搜索是最核心的技术需求之一。VASP作为第一性原理计算的标杆软件&#xff0c;其原生版本虽然强大&#xff0c;但在过渡态计算方面功能相对有限。这就是…

作者头像 李华
网站建设 2026/5/11 19:23:35

中文大语言模型资源导航:Awesome-Chinese-LLM项目全解析

1. 项目概述&#xff1a;一份中文大语言模型的“藏宝图” 如果你最近在关注人工智能&#xff0c;特别是大语言模型&#xff08;LLM&#xff09;领域&#xff0c;那么“Awesome-Chinese-LLM”这个名字你很可能已经听过不止一次了。它不是一个具体的模型&#xff0c;也不是一个训…

作者头像 李华
网站建设 2026/5/11 19:19:34

AD9361射频收发器:高效频点切换与状态机管理的实战解析

1. AD9361射频收发器核心功能解析 AD9361作为一款高度集成的射频收发器芯片&#xff0c;在软件定义无线电(SDR)系统中扮演着关键角色。这款芯片最吸引人的特点就是它能覆盖70MHz到6GHz的超宽频段&#xff0c;而且支持高达56MHz的瞬时带宽。我第一次接触AD9361时&#xff0c;就被…

作者头像 李华