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 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 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 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 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 161