HarmonyOS:粒子动画

一、简介

粒子动画是通过在限定区域内随机生成大量粒子的运动,进而组合成的动画效果,通过Particle组件来实现。动画的基本构成元素为单个粒子,这些粒子可以表现为圆点或图片等形式。开发者能够通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等多个维度上的动态变化做动画,以营造特定的氛围,例如模拟下雪场景时,飘舞的雪花实际上是由一个个雪花粒子的动画效果所构成。
粒子动画的简单实现如下所示

示例代码

c 复制代码
@Entry
@Component
struct ParticleExample {
  build() {
    Stack() {
      Text()
        .width(300).height(300).backgroundColor('rgb(240, 250, 255)')
      Particle({ particles: [
        {
          emitter: {
            particle: {
              type: ParticleType.POINT, // 粒子类型
              config: {
                radius: 5 // 圆点半径
              },
              count: 100, // 粒子总数
            },
          },
          color:{
            range:['rgb(39, 135, 217)','rgb(0, 74, 175)'],//初始颜色范围
          },
        },
      ]
      }).width(250).height(250)
    }.width("100%").height("100%").align(Alignment.Center)
  }
}

二、实现粒子发射器

粒子发射器(Particle Emitter )主要定义粒子的初始属性(如类型、位置和颜色),控制粒子的生成速率,以及管理粒子的生命周期。可通过emitter方法调整粒子发射器的位置、发射速率和发射窗口的大小,实现发射器位置的动态更新。
示例效果图

示例代码

c 复制代码
@Entry
@Component
struct ParticleExample2 {
  @State emitterProperties: Array<EmitterProperty> = [
    {
      index: 0,
      emitRate: 100,
      position: { x: 60, y: 80 },
      size: { width: 200, height: 200 }
    }
  ]

  build() {
    Stack() {
      Text()
        .width(300).height(300).backgroundColor('rgb(240, 250, 255)')
      Particle({
        particles: [
          {
            emitter: {
              particle: {
                type: ParticleType.POINT, // 粒子类型
                config: {
                  radius: 5 // 圆点半径
                },
                count: 100, // 粒子总数
              },
            },
            color: {
              range: ['rgb(39, 135, 217)', 'rgb(0, 74, 175)'], //初始颜色范围
            },
          },
        ]
      }).width(300).height(300).emitter(this.emitterProperties) // 动态调整粒子发射器的位置
    }.width("100%").height("100%").align(Alignment.Center)
  }
}

三、设置粒子颜色

可以通过range来确定粒子的初始颜色范围,而distributionType则用于指定粒子初始颜色随机值的分布方式,具体可选择均匀分布或者高斯(正态)分布。

c 复制代码
// ...
color: {
  range: ['rgb(39, 135, 217)','rgb(0, 74, 175)'], // 初始颜色范围
  distributionType: DistributionType.GAUSSIAN // 初始颜色随机值分布
},
// ...

四、粒子的生命周期

粒子的生命周期(Lifecycle)是粒子从生成至消亡的整个过程,用于确定粒子的存活时间长度。粒子的生命周期可通过设置lifetime和lifetimeRange来指定。

c 复制代码
// ...
emitter: {
  particle: {
    // ...
    lifetime: 300, // 粒子生命周期,单位ms
    lifetimeRange: 100 // 粒子生命周期取值范围,单位ms
  },
  emitRate: 10, // 每秒发射粒子数
  position: [0, 0],
  shape: ParticleEmitterShape.RECTANGLE // 发射器形状
},
color: {
  range: ['rgb(39, 135, 217)','rgb(0, 74, 175)'], // 初始颜色范围
},
// ...

五、设置粒子扰动场

扰动场(Disturbance Field)是一种影响粒子运动的机制。通过在粒子所在的空间区域内施加特定的力,扰动场能够改变粒子的轨迹和行为,进而实现更为复杂和自然的动画效果。扰动场的配置可以通过disturbanceFields方法来完成。

c 复制代码
// ...
Particle({ particles: [
  {
    emitter: // ...
    color: // ...
    scale: {
      range: [0.0, 0.0],
      updater: {
        type: ParticleUpdater.CURVE,
        config: [
          {
            from: 0.0,
            to: 0.5,
            startMillis: 0,
            endMillis: 3000,
            curve: Curve.EaseIn
          }
        ]
      }
    },
    acceleration: { //加速度的配置,从大小和方向两个维度变化,speed表示加速度大小,angle表示加速度方向
      speed: {
        range: [3, 9],
        updater: {
          type: ParticleUpdater.RANDOM,
          config: [1, 20]
        }
      },
      angle: {
        range: [90, 90]
      }
    }

  }
]
}).width(300).height(300).disturbanceFields([{
  strength: 10,
  shape: DisturbanceFieldShape.RECT,
  size: { width: 100, height: 100 },
  position: { x: 100, y: 100 },
  feather: 15,
  noiseScale: 10,
  noiseFrequency: 15,
  noiseAmplitude: 5
}])
// ... 
相关推荐
ChinaDragon1 小时前
HarmonyOS:转场动画--共享元素转场 (一镜到底)
harmonyos
zhujian826372 小时前
十六、【鸿蒙 NEXT】如何申请权限
华为·harmonyos·权限申请
汉堡黄•᷄ࡇ•᷅2 小时前
鸿蒙开发:案例集合List:ListItem拖拽(交换位置,过渡动画)
harmonyos·鸿蒙·鸿蒙系统
食品一少年2 小时前
【Day11】开源鸿蒙复盘(2)
华为·开源·harmonyos
malajisi012 小时前
鸿蒙PC开发笔记一:HarmonyOS PC 命令行适配指南(Mac 版)
笔记·macos·harmonyos·harmony·鸿蒙pc·harmony pc
zhujian826372 小时前
【鸿蒙 NEXT】系统设置中各个页面的uri
华为·harmonyos·系统设置uri
食品一少年2 小时前
【Day11】开源鸿蒙复盘(1)
华为·harmonyos
后端小张2 小时前
【鸿蒙2025领航者闯关】鸿蒙OS在工业控制领域的技术突破与实战应用
5g·华为·云计算·harmonyos·鸿蒙·鸿蒙系统·鸿蒙2025领航者闯关
盐焗西兰花11 小时前
鸿蒙学习实战之路 - 图片预览功能实现
学习·华为·harmonyos