1e41f4b71Sopenharmony_ci# Particle Animation
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci[Particle animation](../reference/apis-arkui/arkui-ts/ts-particle-animation.md) is an animation composed of a multitude of particles randomly generated within a certain range. The particles can be points or images. By animating different aspects of the particles, such as color, opacity, scale, velocity, acceleration, and spin angle, you can create engaging and dynamic aesthetics. For example, you can create an impressive snowfall animation by animating the particles – snowflakes.
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ciThe component used for producing particle animations is **Particle**.
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ciBelow is the sample code and effect:
8e41f4b71Sopenharmony_ci```ts
9e41f4b71Sopenharmony_ci@Entry
10e41f4b71Sopenharmony_ci@Component
11e41f4b71Sopenharmony_cistruct ParticleExample {
12e41f4b71Sopenharmony_ci  build() {
13e41f4b71Sopenharmony_ci    Stack() {
14e41f4b71Sopenharmony_ci      Text()
15e41f4b71Sopenharmony_ci        .width(300).height(300).backgroundColor(Color.Black)
16e41f4b71Sopenharmony_ci      Particle({ particles: [
17e41f4b71Sopenharmony_ci        {
18e41f4b71Sopenharmony_ci          emitter: {
19e41f4b71Sopenharmony_ci            particle: {
20e41f4b71Sopenharmony_ci              type: ParticleType.POINT, // Particle type.
21e41f4b71Sopenharmony_ci              config: {
22e41f4b71Sopenharmony_ci                radius: 5 // Point radius.
23e41f4b71Sopenharmony_ci              },
24e41f4b71Sopenharmony_ci              count: 100, // Total number of particles.
25e41f4b71Sopenharmony_ci            },
26e41f4b71Sopenharmony_ci          },
27e41f4b71Sopenharmony_ci        },
28e41f4b71Sopenharmony_ci      ]
29e41f4b71Sopenharmony_ci      }).width(250).height(250)
30e41f4b71Sopenharmony_ci    }.width("100%").height("100%").align(Alignment.Center)
31e41f4b71Sopenharmony_ci  }
32e41f4b71Sopenharmony_ci}
33e41f4b71Sopenharmony_ci```
34e41f4b71Sopenharmony_ci
35e41f4b71Sopenharmony_ci![particle-base](figures/particle-base.gif)
36e41f4b71Sopenharmony_ci
37e41f4b71Sopenharmony_ci
38e41f4b71Sopenharmony_ci## Particle Emitter
39e41f4b71Sopenharmony_ci
40e41f4b71Sopenharmony_ciA particle emitter in particle animation is a component used to generate and control particles. It is primarily used to define the initial properties of particles (such as type, position, and color), control the rate of particle emission, and manage the lifecycle of the particles.
41e41f4b71Sopenharmony_ci
42e41f4b71Sopenharmony_ciThe position of the emitter can be dynamically updated. You can adjust the position, emission rate, and size of the emission window for the emitter using the [emitter](../reference/apis-arkui/arkui-ts/ts-particle-animation.md#emitter12) API.
43e41f4b71Sopenharmony_ci
44e41f4b71Sopenharmony_ci```ts
45e41f4b71Sopenharmony_ci// ...
46e41f4b71Sopenharmony_ci@State emitterProperties: Array<EmitterProperty> = [
47e41f4b71Sopenharmony_ci  {
48e41f4b71Sopenharmony_ci    index: 0,
49e41f4b71Sopenharmony_ci    emitRate: 100,
50e41f4b71Sopenharmony_ci    position: { x: 60, y: 80 },
51e41f4b71Sopenharmony_ci    size: { width: 200, height: 200 }
52e41f4b71Sopenharmony_ci  }
53e41f4b71Sopenharmony_ci]
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ciParticle(...).width(300).height(300).emitter(this.emitterProperties) // Dynamically adjust the position of the particle emitter.
56e41f4b71Sopenharmony_ci// ...
57e41f4b71Sopenharmony_ci```
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ci![particle-emitter](figures/particle-emitter.gif)
60e41f4b71Sopenharmony_ci
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ci## Color
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ciSet the type of random value distribution for the initial color of particles. using [DistributionType](../reference/apis-arkui/arkui-ts/ts-particle-animation.md#distributiontype12). You can choose between uniform distribution or Gaussian (normal) distribution.
65e41f4b71Sopenharmony_ci
66e41f4b71Sopenharmony_ci```ts
67e41f4b71Sopenharmony_ci// ...
68e41f4b71Sopenharmony_cicolor: {
69e41f4b71Sopenharmony_ci  range: [Color.White, Color.Yellow], // Initial color range.
70e41f4b71Sopenharmony_ci  distributionType: DistributionType.GAUSSIAN // Random value distribution type of the initial color.
71e41f4b71Sopenharmony_ci},
72e41f4b71Sopenharmony_ci// ...
73e41f4b71Sopenharmony_ci```
74e41f4b71Sopenharmony_ci
75e41f4b71Sopenharmony_ci![particle-color](figures/particle-color.gif)
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_ci## Lifecycle
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_ciThe lifecycle of a particle, from creation to expiration, is used to specify how long a particle exists.
81e41f4b71Sopenharmony_ci
82e41f4b71Sopenharmony_ciSet the particle lifecycle using **lifetime** and **lifetimeRange**.
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci```ts
85e41f4b71Sopenharmony_ci// ...
86e41f4b71Sopenharmony_ciemitter: {
87e41f4b71Sopenharmony_ci  particle: {
88e41f4b71Sopenharmony_ci    // ...
89e41f4b71Sopenharmony_ci    lifetime: 300, // Particle lifetime, in ms.
90e41f4b71Sopenharmony_ci    lifetimeRange: 100 // Range of particle lifetime values, in ms.
91e41f4b71Sopenharmony_ci  },
92e41f4b71Sopenharmony_ci  emitRate: 10, // Number of particles emitted per second.
93e41f4b71Sopenharmony_ci  position: [0, 0],
94e41f4b71Sopenharmony_ci  shape: ParticleEmitterShape.RECTANGLE // Emitter shape.
95e41f4b71Sopenharmony_ci},
96e41f4b71Sopenharmony_cicolor: {
97e41f4b71Sopenharmony_ci  range: [Color.White, Color.Yellow], // Initial color range.
98e41f4b71Sopenharmony_ci},
99e41f4b71Sopenharmony_ci// ...
100e41f4b71Sopenharmony_ci```
101e41f4b71Sopenharmony_ci
102e41f4b71Sopenharmony_ci![particle-lifetime](figures/particle-lifetime.gif)
103e41f4b71Sopenharmony_ci
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_ci## Disturbance Field
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_ciA disturbance field is a mechanism used to influence the motion of particles. By applying specific forces within the spatial area where particles exist, it alters their trajectories and behaviors, creating more complex and natural animation effects.
108e41f4b71Sopenharmony_ci
109e41f4b71Sopenharmony_ciConfigure disturbance fields using the [disturbanceFields](../reference/apis-arkui/arkui-ts/ts-particle-animation.md#disturbancefields12) API.
110e41f4b71Sopenharmony_ci
111e41f4b71Sopenharmony_ci```ts
112e41f4b71Sopenharmony_ci// ...
113e41f4b71Sopenharmony_ciParticle({ particles: [
114e41f4b71Sopenharmony_ci  {
115e41f4b71Sopenharmony_ci    emitter: // ...
116e41f4b71Sopenharmony_ci    color: // ...
117e41f4b71Sopenharmony_ci    scale: {
118e41f4b71Sopenharmony_ci      range: [0.0, 0.0],
119e41f4b71Sopenharmony_ci      updater: {
120e41f4b71Sopenharmony_ci        type: ParticleUpdater.CURVE,
121e41f4b71Sopenharmony_ci        config: [
122e41f4b71Sopenharmony_ci          {
123e41f4b71Sopenharmony_ci            from: 0.0,
124e41f4b71Sopenharmony_ci            to: 0.5,
125e41f4b71Sopenharmony_ci            startMillis: 0,
126e41f4b71Sopenharmony_ci            endMillis: 3000,
127e41f4b71Sopenharmony_ci            curve: Curve.EaseIn
128e41f4b71Sopenharmony_ci          }
129e41f4b71Sopenharmony_ci        ]
130e41f4b71Sopenharmony_ci      }
131e41f4b71Sopenharmony_ci    },
132e41f4b71Sopenharmony_ci    acceleration: { // Acceleration. speed indicates the acceleration speed, and angle indicates the acceleration direction.
133e41f4b71Sopenharmony_ci      speed: {
134e41f4b71Sopenharmony_ci        range: [3, 9],
135e41f4b71Sopenharmony_ci        updater: {
136e41f4b71Sopenharmony_ci          type: ParticleUpdater.RANDOM,
137e41f4b71Sopenharmony_ci          config: [1, 20]
138e41f4b71Sopenharmony_ci        }
139e41f4b71Sopenharmony_ci      },
140e41f4b71Sopenharmony_ci      angle: {
141e41f4b71Sopenharmony_ci        range: [90, 90]
142e41f4b71Sopenharmony_ci      }
143e41f4b71Sopenharmony_ci    }
144e41f4b71Sopenharmony_ci
145e41f4b71Sopenharmony_ci  }
146e41f4b71Sopenharmony_ci]
147e41f4b71Sopenharmony_ci}).width(300).height(300).disturbanceFields([{
148e41f4b71Sopenharmony_ci  strength: 10,
149e41f4b71Sopenharmony_ci  shape: DisturbanceFieldShape.RECT,
150e41f4b71Sopenharmony_ci  size: { width: 100, height: 100 },
151e41f4b71Sopenharmony_ci  position: { x: 100, y: 100 },
152e41f4b71Sopenharmony_ci  feather: 15,
153e41f4b71Sopenharmony_ci  noiseScale: 10,
154e41f4b71Sopenharmony_ci  noiseFrequency: 15,
155e41f4b71Sopenharmony_ci  noiseAmplitude: 5
156e41f4b71Sopenharmony_ci}])
157e41f4b71Sopenharmony_ci// ... 
158e41f4b71Sopenharmony_ci```
159e41f4b71Sopenharmony_ci
160e41f4b71Sopenharmony_ci![particle-disturbance](figures/particle-disturbance.gif)
161