• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 粒子动画 (Particle)
2
3粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。动画元素是一个个粒子,这些粒子可以是圆点、图片。通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下雪的动效,雪花飘舞就相当于一个个雪花粒子在做动画。
4
5粒子动画的效果通过Particle组件展现。
6
7
8>  **说明:**
9>
10>  该组件从API version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
11
12
13## 子组件
14
1516
17
18## 接口
19
20```typescript
21interface ParticleInterface {
22  <
23    PARTICLE extends ParticleType,
24    COLOR_UPDATER extends ParticleUpdater,
25    OPACITY_UPDATER extends ParticleUpdater,
26    SCALE_UPDATER extends ParticleUpdater,
27    ACC_SPEED_UPDATER extends ParticleUpdater,
28    ACC_ANGLE_UPDATER extends ParticleUpdater,
29    SPIN_UPDATER extends ParticleUpdater
30  >(particles: Particles<
31      PARTICLE,
32      COLOR_UPDATER,
33      OPACITY_UPDATER,
34      SCALE_UPDATER,
35      ACC_SPEED_UPDATER,
36      ACC_ANGLE_UPDATER,
37      SPIN_UPDATER
38    >): ParticleAttribute;
39}
40```
41
42**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
43
44**参数:**
45
46| 参数名 | 类型 | 必填 | 描述 |
47| -------- | -------- | -------- | -------- |
48| particles | [Particles](#particles14)<<br/>&nbsp;&nbsp;[PARTICLE](#particletype), <br/>&nbsp;&nbsp;[COLOR_UPDATER](#particleupdater),<br/>&nbsp;&nbsp;[OPACITY_UPDATER](#particleupdater),<br/>&nbsp;&nbsp;[SCALE_UPDATER](#particleupdater),<br/>&nbsp;&nbsp;[ACC_SPEED_UPDATER](#particleupdater),<br/>&nbsp;&nbsp;[ACC_ANGLE_UPDATER](#particleupdater),<br/>&nbsp;&nbsp;[SPIN_UPDATER](#particleupdater)<br/>><br/> | 是 | 粒子动画的集合,详见[Particles](#particles14)属性说明。 |
49
50## 属性
51
52除支持[通用属性](ts-component-general-attributes.md)外还支持以下属性:
53
54### disturbanceFields<sup>12+</sup>
55
56disturbanceFields(fields: Array&lt;DisturbanceFieldOptions&gt;)
57
58设置扰动场。
59
60**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
61
62**系统能力:** SystemCapability.ArkUI.ArkUI.Full
63
64**参数:**
65
66| 参数名 | 类型    | 必填 | 说明                         |
67| ------ | ------- | ---- | ---------------------------- |
68| fields  | Array<[DisturbanceFieldOptions](#disturbancefieldoptions12)> | 是   | 扰动场数组。 |
69
70### emitter<sup>12+</sup>
71emitter(value: Array&lt;EmitterProperty&gt;)
72
73支持发射器位置动态更新
74
75**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
76
77**系统能力:** SystemCapability.ArkUI.ArkUI.Full
78
79**参数:**
80
81| 参数名 | 类型    | 必填 | 说明                         |
82| ------ | ------- | ---- | ---------------------------- |
83| value  | Array<[EmitterProperty](#emitterproperty12)> | 是   | 需要更新的emitter参数数组 |
84
85## 事件
86支持[通用事件](ts-component-general-events.md)
87
88## ParticleOptions
89
90```typescript
91interface ParticleOptions<
92  PARTICLE extends ParticleType,
93  COLOR_UPDATER extends ParticleUpdater,
94  OPACITY_UPDATER extends ParticleUpdater,
95  SCALE_UPDATER extends ParticleUpdater,
96  ACC_SPEED_UPDATER extends ParticleUpdater,
97  ACC_ANGLE_UPDATER extends ParticleUpdater,
98  SPIN_UPDATER extends ParticleUpdater
99> {
100  emitter: EmitterOptions<PARTICLE>;
101  color?: ParticleColorPropertyOptions<COLOR_UPDATER>;
102  opacity?: ParticlePropertyOptions<number, OPACITY_UPDATER>;
103  scale?: ParticlePropertyOptions<number, SCALE_UPDATER>;
104  velocity?: VelocityOptions;
105  acceleration?: AccelerationOptions<ACC_SPEED_UPDATER, ACC_ANGLE_UPDATER>;
106  spin?: ParticlePropertyOptions<number, SPIN_UPDATER>;
107}
108```
109
110**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
111
112**系统能力:** SystemCapability.ArkUI.ArkUI.Full
113
114| 名称 | 类型 | 必填 | 说明 |
115| -------- | -------- | -------- | -------- |
116| emitter | [EmitterOptions](#emitteroptions)<[PARTICLE](#particletype)> | 是 | 粒子发射器配置。 |
117| color | [ParticleColorPropertyOptions](#particlecolorpropertyoptions)<[COLOR_UPDATER](#particleupdater)> | 否 | 粒子颜色配置。<br/>**说明**:<br/>默认值:{ range:[Color.White,Color.White] } 。图片粒子不支持设置颜色。|
118| opacity | [ParticlePropertyOptions](#particlepropertyoptions)\<number, [OPACITY_UPDATER](#particleupdater)> | 否 | 粒子透明度配置。<br/>默认值:{ range:[1.0,1.0] } |
119| scale | [ParticlePropertyOptions](#particlepropertyoptions)\<number, [SCALE_UPDATER](#particleupdater)> | 否 | 粒子大小配置。<br/>默认值:{ range:[1.0,1.0] } |
120| velocity | [VelocityOptions](#velocityoptions14) |否 | 粒子速度配置。<br/>**说明**:<br/>speed表示速度大小。angle表示速度的方向(单位为角度),以元素几何中心为坐标原点,水平方向为X轴,正数表示顺时针方向旋转角度。<br/>默认值:{ speed:[0.0,0.0],angle:[0.0,0.0] } |
121| acceleration | [AccelerationOptions](#accelerationoptions14)<[ACC_SPEED_UPDATER](#particleupdater), [ACC_ANGLE_UPDATER](#particleupdater)> | 否 | 粒子加速度配置。 <br/>**说明**:<br/>speed表示加速度大小,angle表示加速度方向(单位为角度)。<br/>默认值:{ speed:{range:[0.0,0.0]},angle:{range:[0.0,0.0]} } |
122| spin | [ParticlePropertyOptions](#particlepropertyoptions)<number, [SPIN_UPDATER](#particleupdater)> | 否 | 粒子自旋角度配置。 <br/>默认值:{range:[0.0,0.0]}<br/>方向:正数表示顺时针旋转,负数表示逆时针旋转。 |
123
124
125## EmitterOptions
126粒子发射器的配置
127
128```typescript
129interface EmitterOptions<PARTICLE extends ParticleType> {
130  particle: EmitterParticleOptions<PARTICLE>;
131  emitRate?: number;
132  shape?: ParticleEmitterShape;
133  position?: ParticleTuple<Dimension, Dimension>;
134  size?: ParticleTuple<Dimension, Dimension>;
135}
136```
137
138**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
139
140**系统能力:** SystemCapability.ArkUI.ArkUI.Full
141
142| 名称 | 类型 | 必填 | 说明 |
143| -------- | -------- | -------- | -------- |
144| particle | [EmitterParticleOptions](#emitterparticleoptions14)<[PARTICLE](#particletype)> | 是 | 粒子配置。<br>-type表示粒子类型,可以选择图片或者是点。<br/><br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br>-config表示对应类型的配置。<br>-config类型和type值有关联:<br>1、如果type为ParticleType.POINT,则config类型为[PointParticleParameters](#pointparticleparameters) 。<br>2、如果type为ParticleType.IMAGE,则config类型为[ImageParticleParameters](#imageparticleparameters) 。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br>-count表示发射的粒子总数,count取值>=-1,当count为-1表示粒子总数无限大。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br>-lifetime表示单个粒子的生命周期,默认值1000(即1000ms,1s),lifetime>=-1,当lifetime为-1表示粒子生命周期无限大。当lifetime<-1,取默认值。<br/>**说明:**如果不需要动画一直播放,建议不要将生命周期设置为-1,可能对性能造成较大影响。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。<br>-lifeTimeRange表示粒子生命周期取值范围,设置lifeTimeRange后粒子的生命周期为 [lifetime-lifeTimeRange,lifeTime+lifeTimeRange]中间的一个随机整数。lifeTimeRange 默认值为0,取值范围为为0到正无穷。设置为负值时取默认值。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
145| emitRate | number | 否 | 发射器发射速率(即每秒发射粒子数)。 默认值:5,小于0时取默认值5。emitRate值超过5000时会极大影响性能,建议设置参数小于5000。|
146| shape | [ParticleEmitterShape](#particleemittershape) | 否 | 发射器形状。默认值:ParticleEmitterShape.RECTANGLE。 |
147| position | [ParticleTuple](#particletuple14)<[Dimension](ts-types.md#dimension10), [Dimension](ts-types.md#dimension10)> | 否 | 发射器位置(距离组件左上角的位置。第一个参数为x方向上的相对偏移,第二个参数为y轴方向相对偏移。) <br>默认值:`[0.0, 0.0]`。|
148| size |  [ParticleTuple](#particletuple14)<[Dimension](ts-types.md#dimension10), [Dimension](ts-types.md#dimension10)>     |否 | 发射窗口的大小。第一个参数为发射器宽,第二个参数为发射器高。<br>默认值:`['100%','100%']`(即发射窗口占满Particle组件)。 |
149
150## ParticleConfigs
151
152```typescript
153interface ParticleConfigs {
154  [ParticleType.POINT]: PointParticleParameters;
155  [ParticleType.IMAGE]: ImageParticleParameters;
156}
157```
158
159**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
160
161**系统能力:** SystemCapability.ArkUI.ArkUI.Full
162
163| 名称   | 类型   | 必填 | 说明 |
164| -------- | -------------- | -------- | -------- |
165| [ParticleType.POINT]      | [PointParticleParameters](#pointparticleparameters) | 是    | 点状粒子配置。 |
166| [ParticleType.IMAGE]      | [ImageParticleParameters](#imageparticleparameters) | 是    | 图片粒子配置。 |
167
168## PointParticleParameters
169```typescript
170interface PointParticleParameters {
171  radius: VP;
172}
173```
174
175**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
176
177**系统能力:** SystemCapability.ArkUI.ArkUI.Full
178
179| 名称   | 类型   | 必填 | 说明 |
180| -------- | -------------- | -------- | -------- |
181| radius      | [VP](ts-types.md#vp10)| 是    | 粒子半径。 |
182
183## ImageParticleParameters
184```typescript
185interface ImageParticleParameters {
186  src: ResourceStr;
187  size: ParticleTuple<Dimension, Dimension>;
188  objectFit?: ImageFit;
189}
190```
191
192**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
193
194**系统能力:** SystemCapability.ArkUI.ArkUI.Full
195
196| 名称   | 类型   | 必填 | 说明 |
197| -------- | -------------- | -------- | -------- |
198| src      | [ResourceStr](ts-types.md#resourcestr) | 是    | 图片路径。暂不支持svg图片类型。 |
199| size     | [ParticleTuple](#particletuple14)<[Dimension](ts-types.md#dimension10), [Dimension](ts-types.md#dimension10)> | 是    | 图像尺寸。 |
200| objectFit| [ImageFit](ts-appendix-enums.md#imagefit)| 否    | 图片显示模式。 |
201
202## ParticleColorPropertyOptions
203
204```typescript
205interface ParticleColorPropertyOptions<UPDATER extends ParticleUpdater> {
206  range: ParticleTuple<ResourceColor, ResourceColor>;
207  distributionType?: DistributionType;
208  updater?: ParticleColorUpdaterOptions<UPDATER>;
209}
210```
211**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
212
213**系统能力:** SystemCapability.ArkUI.ArkUI.Full
214
215| 名称 | 类型 | 必填 | 说明 |
216| -------- | -------- | -------- | -------- |
217| range | [ParticleTuple](#particletuple14)<[ResourceColor](ts-types.md#resourcecolor), [ResourceColor](ts-types.md#resourcecolor)> | 是 | 粒子初始颜色区间,粒子发射器生成粒子的初始颜色在range区间随机取值。<br>默认值:range:[Color.White,Color.White] |
218| distributionType<sup>12+<sup> | [DistributionType](#distributiontype12) | 否 | 粒子初始颜色随机值分布,允许用户选择颜色随机值生成的分布类型,支持均匀分布或正态(高斯)分布。<br>默认值:DistributionType.UNIFORM<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
219| updater | [ParticleColorUpdaterOptions](#particlecolorupdateroptions14)<[UPDATER](#particleupdater)> | 否 | 颜色属性变化配置。颜色属性变化类型type有三类:<br>1、当type为ParticleUpdater.NONE,表示无变化,则config类型为[ParticleColorPropertyUpdaterConfigs](#particlecolorpropertyupdaterconfigs)[ParticleUpdater.NONE]。 <br>2、type为ParticleUpdater.RANDOM,表示随机变化,则config类型为[ParticleColorPropertyUpdaterConfigs](#particlecolorpropertyupdaterconfigs)[ParticleUpdater.RANDOM]。 <br>3、type为ParticleUpdater.CURVE,表示按动画曲线变化,则config类型为[ParticleColorPropertyUpdaterConfigs](#particlecolorpropertyupdaterconfigs)[ParticleUpdater.CURVE]。<br>默认值:type默认为 ParticleUpdater.NONE。 <br>**说明**:<br>当type为ParticleUpdater.RANDOM或者ParticleUpdater.CURVE时,updater中颜色配置的优先级高于range中的颜色配置。在updater配置的动画时间周期内,以updater中的颜色配置来变化;在updater配置的动画时间周期外,以range中的颜色配置来变化。 |
220
221
222## ParticleColorPropertyUpdaterConfigs
223```typescript
224interface ParticleColorPropertyUpdaterConfigs {
225  [ParticleUpdater.NONE]: void;
226  [ParticleUpdater.RANDOM]: ParticleColorOptions;
227  [ParticleUpdater.CURVE]: Array<ParticlePropertyAnimation<ResourceColor>>;
228}
229```
230
231**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
232
233**系统能力:** SystemCapability.ArkUI.ArkUI.Full
234
235| 名称 | 类型 | 必填 | 说明 |
236| -------- | -------- | -------- | -------- |
237|[ParticleUpdater.NONE]|void | 是 | 无变化。|
238| [ParticleUpdater.RANDOM] | [ParticleColorOptions](#particlecoloroptions14) | 是 | 表示变化方式为均匀变化的时候,在区间内随机生成一个差值。r、g、b、a四个颜色通道每秒分别使用差值叠加当前颜色值,生成目标颜色值。实现颜色随机变化的效果。 |
239[ParticleUpdater.CURVE]|Array<[ParticlePropertyAnimation](#particlepropertyanimation)\<[ResourceColor](ts-types.md#resourcecolor)\>> | 是 | 表示变化方式为曲线变化时,颜色变化的配置。数组类型表示当前属性可以设置多段动画,如0ms-3000ms,3000ms-5000ms,5000ms-8000ms分别设置动画。|
240
241## ParticlePropertyOptions
242```typescript
243interface ParticlePropertyOptions<TYPE, UPDATER extends ParticleUpdater> {
244  range: ParticleTuple<TYPE, TYPE>;
245  updater?: ParticleUpdaterOptions<TYPE, UPDATER>;
246}
247```
248
249**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
250
251**系统能力:** SystemCapability.ArkUI.ArkUI.Full
252
253| 名称 | 类型 | 必填 | 说明 |
254| -------- | -------- | -------- | -------- |
255| range | [ParticleTuple](#particletuple14)<[TYPE](#particleupdater), [TYPE](#particleupdater)> | 是 | 粒子初始属性值区间,粒子发射器生成粒子的属性值在range区间随机取值。<br/>**说明**<br/>各项属性的非法输入取默认值,当最大值小于最小值的时候取默认区间。TYPE为number。<br/>不同属性的默认值不同:<br>1、opacity属性:range:[1.0,1.0],取值范围为[0, 1],默认值为1.0。<br/>2、scale属性:range:[1.0,1.0],取值范围为[0, 10000],默认值为1.0。<br/>3、acceleration加速度speed属性:range:[0.0,0.0],取值范围为[0, 10000],默认值为0.0。<br/>4、acceleration加速度angle属性:range:[0.0,0.0],取值范围为[-10000, 10000],默认值为0.0。<br/>5、spin属性:range:[0.0,0.0],取值范围为[-10000, 10000],默认值为0.0。
256| updater | [ParticleUpdaterOptions](#particleupdateroptions14)<[TYPE](#particleupdater), [UPDATER](#particleupdater)> | 否 | 属性变化配置。属性变化类型type有三类:<br/>1、当type为ParticleUpdater.NONE,表示无变化,则config类型为[ParticlePropertyUpdaterConfigs](#particlepropertyupdaterconfigs)[ParticleUpdater.NONE]。<br>2、当type为ParticleUpdater.RANDOM,表示变化类型为随机变化,则config类型为[ParticlePropertyUpdaterConfigs](#particlepropertyupdaterconfigs)[ParticleUpdater.RANDOM]。<br>3、当type为ParticleUpdater.CURVE,表示变化类型为曲线变化,则config类型为[ParticlePropertyUpdaterConfigs](#particlepropertyupdaterconfigs)[ParticleUpdater.CURVE] <br>默认值:type默认为ParticleUpdater.NONE。 |
257
258
259## ParticlePropertyUpdaterConfigs
260```typescript
261interface ParticlePropertyUpdaterConfigs<T> {
262    [ParticleUpdater.NONE]: void;
263    [ParticleUpdater.RANDOM]: ParticleTuple<T, T>;
264    [ParticleUpdater.CURVE]: Array<ParticlePropertyAnimation<T>>;
265}
266```
267
268**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
269
270**系统能力:** SystemCapability.ArkUI.ArkUI.Full
271
272| 名称 | 类型 | 必填 | 说明 |
273| -------- | -------- | -------- | -------- |
274[[ParticleUpdater.NONE]|void | 是 | 无变化。|
275| [ParticleUpdater.RANDOM] | [ParticleTuple](#particletuple14)<T, T> | 是 | 表示变化方式为匀速变化时,每秒的变化差值为设置区间随机生成的值。<br/>目标属性值为当前属性值叠加变化差值。如当前属性值为0.2,config取[0.1,1.0]:<br/>1、如果变化差值在区间[0.1,1.0]取随机值0.5,则目标属性值为0.2+0.5 = 0.7;<br/>2、变化差值也可以取负值。如当前属性值为0.2,config为 [-3.0,2.0],如果变化差值在区间[-3.0,2.0]取随机值-2.0,则目标属性值为0.2-2.0 = -1.8。<br>**说明:**<br>config配置的是变化差值的取值范围,差值的最大最小值没有约束。但是如果当前属性值叠加差值大于属性最大值,目标属性值取属性最大值;如果当前属性值叠加差值小于属性最小值,目标属性值取属性最小值。T为number。<br>例如:opacity的取值范围[0.0,1.0]则当当前属性值叠加差值超过1.0,则取1.0。|
276|[ParticleUpdater.CURVE]|Array<[ParticlePropertyAnimation](#particlepropertyanimation)\<T\>> | 是 | 表示变化方式为曲线变化时,属性变化的配置。数组类型表示当前属性可以设置多段动画,如0ms-3000ms,3000ms-5000ms,5000ms-8000ms分别设置动画。T为number。|
277
278## ParticlePropertyAnimation
279```typescript
280interface ParticlePropertyAnimation<T> {
281  from: T;
282  to: T;
283  startMillis: number;
284  endMillis: number;
285  curve?: Curve | ICurve;
286}
287```
288
289**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
290
291**系统能力:** SystemCapability.ArkUI.ArkUI.Full
292
293| 名称 | 类型 | 必填 | 说明 |
294| -------- | -------- | -------- | -------- |
295|from| T | 是 | 属性起始值。非法输入取对应属性的默认值。|
296| to | T | 是 | 属性目标值。非法输入取对应属性的默认值。|
297|startMillis|number | 是 | 动画开始时间。<br/>单位:毫秒。<br/>取值范围:[0, +∞)。|
298|endMillis|number | 是 | 动画结束时间。<br/>单位:毫秒。<br/>取值范围:[0, +∞)。|
299|curve|[Curve](ts-appendix-enums.md#curve)&nbsp;\|&nbsp;[ICurve](../js-apis-curve.md#icurve9)| 否 | 设置动画曲线。<br>默认值:Curve.Linear|
300
301
302## ParticleType
303```typescript
304enum ParticleType {
305  POINT = 'point',
306  IMAGE = 'image',
307}
308```
309**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
310
311**系统能力:** SystemCapability.ArkUI.ArkUI.Full
312
313| 名称  | 描述 |
314| -------- |  -------- |
315POINT |点状粒子|
316IMAGE | 图片粒子|
317
318
319
320## ParticleEmitterShape
321```typescript
322enum ParticleEmitterShape {
323  RECTANGLE = 'rectangle',
324  CIRCLE = 'circle',
325  ELLIPSE = 'ellipse',
326}
327```
328
329**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
330
331**系统能力:** SystemCapability.ArkUI.ArkUI.Full
332
333| 名称  | 描述 |
334| -------- |  -------- |
335RECTANGLE |粒子发射器为矩形|
336CIRCLE | 粒子发射器为圆形|
337ELLIPSE |粒子发射器为椭圆形|
338
339## DistributionType<sup>12+<sup>
340```typescript
341enum DistributionType {
342  UNIFORM = 0,
343  GAUSSIAN = 1,
344}
345```
346**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
347
348**系统能力:** SystemCapability.ArkUI.ArkUI.Full
349
350| 名称  | 描述 |
351| -------- |  -------- |
352| UNIFORM |初始颜色随机值分布为均匀分布。|
353| GAUSSIAN | 初始颜色随机值分布为高斯分布。|
354
355## ParticleUpdater
356```typescript
357enum ParticleUpdater {
358  NONE = 'none',
359  RANDOM = 'random',
360  CURVE = 'curve',
361}
362```
363
364**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
365
366**系统能力:** SystemCapability.ArkUI.ArkUI.Full
367
368| 名称  | 描述 |
369| -------- |  -------- |
370|NONE |无变化|
371|RANDOM | 随机变化|
372|CURVE |动画曲线变化|
373
374## DisturbanceFieldOptions<sup>12+</sup>
375
376**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
377
378**系统能力:** SystemCapability.ArkUI.ArkUI.Full
379
380| 名称 | 类型    | 必填 | 说明                         |
381| ------ | ------- | ---- | ---------------------------- |
382| strength  | number | 否   |场强,表示场从中心向外的排斥力的强度,默认值0。正数表示排斥力方向朝外,负数表示吸引力,方向朝内。<br/>取值范围:(-∞, +∞)。 |
383| shape  |   [DisturbanceFieldShape](#disturbancefieldshape12) | 否   | 场的形状。<br/>默认为DisturbanceFieldShape.RECT。 |
384| size  | [SizeT](../js-apis-arkui-graphics.md#sizett12)&lt;number&gt;| 否  |场的大小。<br/>默认值 {width:0,height:0}。<br/>width和height的取值范围:[0, +∞)。 |
385| position  | [PositionT](../js-apis-arkui-graphics.md#positiont12)&lt;number&gt; | 否   |场的位置。<br/>默认值{x:0,y:0}。<br/>x、y的取值范围:(-∞, +∞)。 |
386| feather  | number | 否   |羽化值,表示场从中心点到场边缘的衰减程度,取值范围0到100的整数,如果0则表示场是一个刚体,所有范围内的粒子都被排斥在外。羽化值越大场的缓和程度越大,场范围内出现越多靠近中心点的粒子。<br/>默认值为0。 |
387| noiseScale  | number | 否   |噪声尺度,用于控制噪声图案的整体大小,取值大于等于0。<br/>默认值1。 |
388| noiseFrequency  | number | 否   |噪声频率,频率越大噪声越细腻,取值大于等于0。<br/> 默认值1。 |
389| noiseAmplitude  | number | 否   |噪声震幅,噪声的波动的范围,震幅越大噪音之间差异越大。取值大于等于0。<br/> 默认值1。 |
390
391## DisturbanceFieldShape<sup>12+</sup>
392
393**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
394
395**系统能力:** SystemCapability.ArkUI.ArkUI.Full
396
397| 名称        | 描述   |
398| --------| ----------|
399| RECT    | 长方形。   |
400|  CIRCLE | 圆。       |
401| ELLIPSE | 椭圆。     |
402
403## EmitterProperty<sup>12+</sup>
404
405**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
406
407**系统能力:** SystemCapability.ArkUI.ArkUI.Full
408
409| 名称 | 类型    | 必填 | 说明                         |
410| ------ | ------- | ---- | ---------------------------- |
411| index   | number | 是   |索引,取整,按初始化参数中发射器的数组索引指定对应的发射器。异常默认值为0。 |
412| emitRate  | number  | 否   | 发射器发射速率,即每秒发射粒子的数量。<br/>未传入时保持其当前的发射速率, 传入值小于0时取默认值5。emitRate值超过5000时会极大影响性能,建议设置参数小于5000。 |
413| position  | [PositionT](../js-apis-arkui-graphics.md#positiont12)&lt;number&gt; | 否   |发射器位置的数组,只支持number类型。<br/>未传入时保持其当前的发射器位置。需传入两个有效参数,若其中一个为异常值,则position不生效。<br/>x、y的取值范围:(-∞, +∞)。 |
414| size  | [SizeT](../js-apis-arkui-graphics.md#sizett12)&lt;number&gt;| 否  |发射窗口的大小,只支持number类型。<br/>未传入时保持其当前发射窗口大小。需传入两个有效参数且都大于0,若其中一个为异常值,则size不生效。 |
415
416## ParticleTuple<sup>14+</sup>
417
418```typescript
419declare type ParticleTuple<T1, T2> = [T1, T2];
420```
421
422粒子元组,表示定义一些动画参数的类型。
423
424**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
425
426**系统能力:** SystemCapability.ArkUI.ArkUI.Full
427
428| 类型         | 说明                                           |
429| ----------- | ---------------------------------------------- |
430| [T1, T2]    | 一些动画参数的类型,可能是任何类型。              |
431
432## Particles<sup>14+</sup>
433
434```typescript
435interface Particles<
436  PARTICLE extends ParticleType,
437  COLOR_UPDATER extends ParticleUpdater,
438  OPACITY_UPDATER extends ParticleUpdater,
439  SCALE_UPDATER extends ParticleUpdater,
440  ACC_SPEED_UPDATER extends ParticleUpdater,
441  ACC_ANGLE_UPDATER extends ParticleUpdater,
442  SPIN_UPDATER extends ParticleUpdater
443> {
444  particles: Array<
445    ParticleOptions<
446      PARTICLE,
447      COLOR_UPDATER,
448      OPACITY_UPDATER,
449      SCALE_UPDATER,
450      ACC_SPEED_UPDATER,
451      ACC_ANGLE_UPDATER,
452      SPIN_UPDATER
453    >
454  >;
455}
456```
457
458粒子动画的集合。
459
460**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
461
462**系统能力:** SystemCapability.ArkUI.ArkUI.Full
463
464| 名称    | 类型                           | 必填 | 说明                                                                                                                     |
465| ------ | ------------------------------ | ---- | ----------------------------------------------------------------------------------------------------------------------- |
466| particles  | Array<<br/>&nbsp;&nbsp;ParticleOptions<<br/>&nbsp;&nbsp;&nbsp;&nbsp;PARTICLE,<br/>&nbsp;&nbsp;&nbsp;&nbsp;COLOR_UPDATER,<br/>&nbsp;&nbsp;&nbsp;&nbsp;OPACITY_UPDATER,<br/>&nbsp;&nbsp;&nbsp;&nbsp;SCALE_UPDATER,<br/>&nbsp;&nbsp;&nbsp;&nbsp;ACC_SPEED_UPDATER,<br/>&nbsp;&nbsp;&nbsp;&nbsp;ACC_ANGLE_UPDATER,<br/>&nbsp;&nbsp;&nbsp;&nbsp;SPIN_UPDATER<br/>&nbsp;&nbsp;><br/>>  | 是   | 粒子动画的集合。每一个的粒子动画([ParticleOptions](#particleoptions))包含粒子发射,同时可配置粒子的颜色、透明度、大小、速度、加速度与旋转速度,旋转速度,详见[ParticleOptions](#particleoptions)属性说明。 |
467
468## VelocityOptions<sup>14+</sup>
469
470```typescript
471declare interface VelocityOptions {
472  speed: ParticleTuple<number, number>;
473  angle: ParticleTuple<number, number>;
474}
475```
476
477粒子速度配置。
478
479**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
480
481**系统能力:** SystemCapability.ArkUI.ArkUI.Full
482
483| 名称    | 类型                           | 必填 | 说明                                                                                                                     |
484| ------ | ------------------------------ | ---- | ----------------------------------------------------------------------------------------------------------------------- |
485| speed  | [ParticleTuple](#particletuple14)<number, number>  | 是   | 表示速度大小。<br/>默认值:{range:[0.0,0.0]}                                                                              |
486| angle  | [ParticleTuple](#particletuple14)<number, number>  | 是   | 表示速度的方向(单位为角度)。以元素几何中心为坐标原点,水平方向为X轴,正数表示顺时针方向旋转角度。<br/>默认值:{range:[0.0,0.0]} |
487
488## AccelerationOptions<sup>14+</sup>
489
490```typescript
491declare interface AccelerationOptions<
492  ACC_SPEED_UPDATER extends ParticleUpdater,
493  ACC_ANGLE_UPDATER extends ParticleUpdater
494> {
495  speed?: ParticlePropertyOptions<number, ACC_SPEED_UPDATER>;
496  angle?: ParticlePropertyOptions<number, ACC_ANGLE_UPDATER>;
497}
498```
499
500粒子加速度配置。
501
502**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
503
504**系统能力:** SystemCapability.ArkUI.ArkUI.Full
505
506| 名称    | 类型                                                | 必填 | 说明                                                       |
507| ------ | --------------------------------------------------- | ---- | --------------------------------------------------------- |
508| speed  | [ParticlePropertyOptions](#particlepropertyoptions)<number, [ACC_SPEED_UPDATER](#particleupdater)>  | 否   | 表示加速度大小。<br/>默认值:{range:[0.0,0.0]}              |
509| angle  | [ParticlePropertyOptions](#particlepropertyoptions)<number, [ACC_SPEED_UPDATER](#particleupdater)>  | 否   | 表示加速度方向(单位为角度)。<br/>默认值:{range:[0.0,0.0]} |
510
511## EmitterParticleOptions<sup>14+</sup>
512
513```typescript
514interface EmitterParticleOptions<PARTICLE extends ParticleType> {
515  type: PARTICLE;
516  config: ParticleConfigs[PARTICLE];
517  count: number;
518  lifetime?: number;
519  lifetimeRange?: number;
520}
521```
522
523粒子配置。
524
525**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
526
527**系统能力:** SystemCapability.ArkUI.ArkUI.Full
528
529| 名称    | 类型                                                | 必填 | 说明                                                       |
530| ------ | --------------------------------------------------- | ---- | --------------------------------------------------------- |
531| type  | [PARTICLE](#particletype)  | 是   | 表示粒子类型,可以选择图片或者是点。              |
532| config  | [ParticleConfigs](#particleconfigs)[PARTICLE]  | 是   | 表示对应类型的配置。<br/>config类型和type值有关联:<br>1、如果type为ParticleType.POINT,则config类型为[PointParticleParameters](#pointparticleparameters) 。<br>2、如果type为ParticleType.IMAGE,则config类型为[ImageParticleParameters](#imageparticleparameters) 。 |
533| count  | number  | 是   | 表示发射的粒子总数,count取值>=-1,当count为-1表示粒子总数无限大。 |
534| lifetime  | number  | 否   | 表示单个粒子的生命周期,默认值1000(即1000ms,1s),lifetime>=-1。当lifetime为-1表示粒子生命周期无限大。当lifetime<-1,取默认值。<br/>**说明:** 如果不需要动画一直播放,建议不要将生命周期设置为-1,可能对性能造成较大影响。 |
535| lifeTimeRange  | number  | 否   | 表示粒子生命周期取值范围,设置lifeTimeRange后粒子的生命周期为 [lifetime-lifeTimeRange,lifeTime+lifeTimeRange]中间的一个随机整数。lifeTimeRange 默认值为0,取值范围为为0到正无穷。设置为负值时取默认值。 |
536
537## ParticleUpdaterOptions<sup>14+</sup>
538
539```typescript
540interface ParticleUpdaterOptions<TYPE, UPDATER extends ParticleUpdater> {
541  type: UPDATER;
542  config: ParticlePropertyUpdaterConfigs<TYPE>[UPDATER];
543}
544```
545
546颜色属性变化配置。
547
548**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
549
550**系统能力:** SystemCapability.ArkUI.ArkUI.Full
551
552| 名称    | 类型                                                | 必填 | 说明                                                       |
553| ------ | --------------------------------------------------- | ---- | --------------------------------------------------------- |
554| type  | [UPDATER](#particleupdater)  | 是   | 表示颜色属性变化类型。 <br>默认值:type默认为ParticleUpdater.NONE。              |
555| config  | [UPDATER](#particleupdater)  | 是   | 属性变化配置。属性变化类型type有三类:<br/>1、当type为ParticleUpdater.NONE,表示无变化,则config类型为[ParticlePropertyUpdaterConfigs](#particlepropertyupdaterconfigs)[ParticleUpdater.NONE]。<br>2、当type为ParticleUpdater.RANDOM,表示变化类型为随机变化,则config类型为[ParticlePropertyUpdaterConfigs](#particlepropertyupdaterconfigs)[ParticleUpdater.RANDOM]。<br>3、当type为ParticleUpdater.CURVE,表示变化类型为曲线变化,则config类型为[ParticlePropertyUpdaterConfigs](#particlepropertyupdaterconfigs)[ParticleUpdater.CURVE]。 |
556
557## ParticleColorUpdaterOptions<sup>14+</sup>
558
559```typescript
560interface ParticleColorUpdaterOptions<UPDATER extends ParticleUpdater> {
561  type: UPDATER;
562  config: ParticleColorPropertyUpdaterConfigs[UPDATER];
563}
564```
565
566颜色属性变化配置。
567
568**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
569
570**系统能力:** SystemCapability.ArkUI.ArkUI.Full
571
572| 名称    | 类型                                                | 必填 | 说明                                                       |
573| ------ | --------------------------------------------------- | ---- | --------------------------------------------------------- |
574| type  | [UPDATER](#particleupdater)  | 是   | 表示颜色属性变化类型。<br>默认值:type默认为 ParticleUpdater.NONE。              |
575| config  | [UPDATER](#particleupdater)  | 是   | 颜色属性变化类型type有三类:<br>1、当type为ParticleUpdater.NONE,表示无变化,则config类型为[ParticleColorPropertyUpdaterConfigs](#particlecolorpropertyupdaterconfigs)[ParticleUpdater.NONE]。 <br>2、type为ParticleUpdater.RANDOM,表示随机变化,则config类型为[ParticleColorPropertyUpdaterConfigs](#particlecolorpropertyupdaterconfigs)[ParticleUpdater.RANDOM]。 <br>3、type为ParticleUpdater.CURVE,表示按动画曲线变化,则config类型为[ParticleColorPropertyUpdaterConfigs](#particlecolorpropertyupdaterconfigs)[ParticleUpdater.CURVE]。 <br>**说明**:<br>当type为ParticleUpdater.RANDOM或者ParticleUpdater.CURVE时,updater中颜色配置的优先级高于range中的颜色配置。在updater配置的动画时间周期内,以updater中的颜色配置来变化;在updater配置的动画时间周期外,以range中的颜色配置来变化。 |
576
577## ParticleColorOptions<sup>14+</sup>
578
579```typescript
580interface ParticleColorOptions {
581  r: ParticleTuple<number, number>;
582  g: ParticleTuple<number, number>;
583  b: ParticleTuple<number, number>;
584  a: ParticleTuple<number, number>;
585}
586```
587
588颜色变化方式为均匀变化的时候,在区间内随机生成一个差值。r、g、b、a四个颜色通道每秒分别使用差值叠加当前颜色值,生成目标颜色值。实现颜色随机变化的效果。
589
590**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
591
592**系统能力:** SystemCapability.ArkUI.ArkUI.Full
593
594| 名称  | 类型                           | 必填 | 说明                         |
595| ---- | ------------------------------ | ---- | --------------------------- |
596| r    | [ParticleTuple](#particletuple14)<number, number>  | 是   | r颜色通道的差值。            |
597| g    | [ParticleTuple](#particletuple14)<number, number>  | 是   | g颜色通道的差值。            |
598| b    | [ParticleTuple](#particletuple14)<number, number>  | 是   | b颜色通道的差值。            |
599| a    | [ParticleTuple](#particletuple14)<number, number>  | 是   | a颜色通道的差值。            |
600
601## 示例
602
603### 示例1(圆形初始化粒子)
604
605描述粒子动画基础用法,通过圆形初始化粒子。
606
607```ts
608// xxx.ets
609@Entry
610@Component
611struct ParticleExample {
612  build() {
613    Stack() {
614      Text()
615        .width(300).height(300).backgroundColor(Color.Black)
616      Particle({
617        particles: [
618          {
619            emitter: {
620              particle: {
621                type: ParticleType.POINT, //粒子类型
622                config: {
623                  radius: 10//圆点半径
624                },
625                count: 500, //粒子总数
626                lifetime: 10000, //粒子生命周期,单位ms
627                lifetimeRange: 100//粒子生命周期取值范围,单位ms
628              },
629              emitRate: 10, //每秒发射粒子数
630              position: [0, 0],
631              shape: ParticleEmitterShape.RECTANGLE//发射器形状
632            },
633            color: {
634              range: [Color.Red, Color.Yellow], //初始颜色范围
635              updater: {
636                type: ParticleUpdater.CURVE, //变化方式为曲线变化
637                config: [
638                  {
639                    from: Color.White, //变化起始值
640                    to: Color.Pink, //变化终点值
641                    startMillis: 0, //开始时间
642                    endMillis: 3000, //结束时间
643                    curve: Curve.EaseIn//变化曲线
644                  },
645                  {
646                    from: Color.Pink,
647                    to: Color.Orange,
648                    startMillis: 3000,
649                    endMillis: 5000,
650                    curve: Curve.EaseIn
651                  },
652                  {
653                    from: Color.Orange,
654                    to: Color.Pink,
655                    startMillis: 5000,
656                    endMillis: 8000,
657                    curve: Curve.EaseIn
658                  },
659                ]
660              }
661            },
662            opacity: {
663              range: [0.0, 1.0], //粒子透明度的初始值从【0.0到1.0】随机产生
664              updater: {
665                type: ParticleUpdater.CURVE,
666                config: [
667                  {
668                    from: 0.0,
669                    to: 1.0,
670                    startMillis: 0,
671                    endMillis: 3000,
672                    curve: Curve.EaseIn
673                  },
674                  {
675                    from: 1.0,
676                    to: 0.0,
677                    startMillis: 5000,
678                    endMillis: 10000,
679                    curve: Curve.EaseIn
680                  }
681                ]
682              }
683            },
684            scale: {
685              range: [0.0, 0.0],
686              updater: {
687                type: ParticleUpdater.CURVE,
688                config: [
689                  {
690                    from: 0.0,
691                    to: 0.5,
692                    startMillis: 0,
693                    endMillis: 3000,
694                    curve: Curve.EaseIn
695                  }
696                ]
697              }
698            },
699            acceleration: {
700              //加速度的配置,从大小和方向两个维度变化,speed表示加速度大小,angle表示加速度方向
701              speed: {
702                range: [3, 9],
703                updater: {
704                  type: ParticleUpdater.RANDOM, //Speed的变化方式是随机变化
705                  config: [1, 20]
706                }
707              },
708              angle: {
709                range: [90, 90]
710              }
711            }
712
713          }
714        ]
715      }).width(300).height(300)
716    }.width("100%").height("100%").align(Alignment.Center)
717  }
718}
719```
720
721![particle](figures/particle.gif)
722
723### 示例2(图片初始化粒子)
724
725描述粒子动画基础用法,通过图片初始化粒子。
726
727```ts
728@Entry
729@Component
730struct ParticleExample {
731  @State
732  myCount: number = 100
733  flag: boolean = false;
734
735  build() {
736    Column() {
737      Stack() {
738        Particle({
739          particles: [
740            {
741              emitter: {
742                particle: {
743                  type: ParticleType.IMAGE,
744                  config: {
745                    src: $r("app.media.book"),
746                    size: [10, 10]
747                  },
748                  count: this.myCount,
749                  lifetime: 10000,
750                  lifetimeRange: 100
751                },
752                emitRate: 3,
753                shape: ParticleEmitterShape.CIRCLE
754              },
755              color: {
756                range: [Color.White, Color.White]
757              },
758              opacity: {
759                range: [1.0, 1.0],
760                updater: {
761                  type: ParticleUpdater.CURVE,
762                  config: [
763                    {
764                      from: 0,
765                      to: 1.0,
766                      startMillis: 0,
767                      endMillis: 6000
768                    },
769                    {
770                      from: 1.0,
771                      to: .0,
772                      startMillis: 6000,
773                      endMillis: 10000
774                    }
775                  ]
776                }
777              },
778              scale: {
779                range: [0.1, 1.0],
780                updater: {
781                  type: ParticleUpdater.CURVE,
782                  config: [
783                    {
784                      from: 0,
785                      to: 1.5,
786                      startMillis: 0,
787                      endMillis: 8000,
788                      curve: Curve.EaseIn
789                    }
790
791                  ]
792                }
793              },
794              acceleration: {
795                speed: {
796                  range: [3, 9],
797                  updater: {
798                    type: ParticleUpdater.CURVE,
799                    config: [
800                      {
801                        from: 10,
802                        to: 20,
803                        startMillis: 0,
804                        endMillis: 3000,
805                        curve: Curve.EaseIn
806                      },
807                      {
808                        from: 10,
809                        to: 2,
810                        startMillis: 3000,
811                        endMillis: 8000,
812                        curve: Curve.EaseIn
813                      }
814                    ]
815                  }
816                },
817                angle: {
818                  range: [0, 180],
819                  updater: {
820                    type: ParticleUpdater.CURVE,
821                    config: [{
822                      from: 1,
823                      to: 2,
824                      startMillis: 0,
825                      endMillis: 1000,
826                      curve: Curve.EaseIn
827                    },
828                      {
829                        from: 50,
830                        to: -50,
831                        startMillis: 1000,
832                        endMillis: 3000,
833                        curve: Curve.EaseIn
834                      },
835                      {
836                        from: 3,
837                        to: 5,
838                        startMillis: 3000,
839                        endMillis: 8000,
840                        curve: Curve.EaseIn
841                      }
842                    ]
843                  }
844                }
845              },
846              spin: {
847                range: [0.1, 1.0],
848                updater: {
849                  type: ParticleUpdater.CURVE,
850                  config: [
851                    {
852                      from: 0,
853                      to: 360,
854                      startMillis: 0,
855                      endMillis: 8000,
856                      curve: Curve.EaseIn
857                    }
858                  ]
859                }
860              },
861            }
862            , {
863            emitter: {
864              particle: {
865                type: ParticleType.IMAGE,
866                config: {
867                  src: $r('app.media.heart'),
868                  size: [10, 10]
869                },
870                count: this.myCount,
871                lifetime: 10000,
872                lifetimeRange: 100
873              },
874              emitRate: 3,
875              shape: ParticleEmitterShape.CIRCLE
876            },
877            color: {
878              range: [Color.White, Color.White]
879            },
880            opacity: {
881              range: [1.0, 1.0],
882              updater: {
883                type: ParticleUpdater.CURVE,
884                config: [
885                  {
886                    from: 0,
887                    to: 1.0,
888                    startMillis: 0,
889                    endMillis: 6000
890                  },
891                  {
892                    from: 1.0,
893                    to: .0,
894                    startMillis: 6000,
895                    endMillis: 10000
896                  }
897                ]
898              }
899            },
900            scale: {
901              range: [0.1, 1.0],
902              updater: {
903                type: ParticleUpdater.CURVE,
904                config: [
905                  {
906                    from: 0,
907                    to: 2.0,
908                    startMillis: 0,
909                    endMillis: 10000,
910                    curve: Curve.EaseIn
911                  }
912
913                ]
914              }
915            },
916            acceleration: {
917              speed: {
918                range: [3, 9],
919                updater: {
920                  type: ParticleUpdater.CURVE,
921                  config: [
922                    {
923                      from: 10,
924                      to: 20,
925                      startMillis: 0,
926                      endMillis: 3000,
927                      curve: Curve.EaseIn
928                    },
929                    {
930                      from: 10,
931                      to: 2,
932                      startMillis: 3000,
933                      endMillis: 8000,
934                      curve: Curve.EaseIn
935                    }
936                  ]
937                }
938              },
939              angle: {
940                range: [0, 180],
941                updater: {
942                  type: ParticleUpdater.CURVE,
943                  config: [{
944                    from: 1,
945                    to: 2,
946                    startMillis: 0,
947                    endMillis: 1000,
948                    curve: Curve.EaseIn
949                  },
950                    {
951                      from: 50,
952                      to: -50,
953                      startMillis: 0,
954                      endMillis: 3000,
955                      curve: Curve.EaseIn
956                    },
957                    {
958                      from: 3,
959                      to: 5,
960                      startMillis: 3000,
961                      endMillis: 10000,
962                      curve: Curve.EaseIn
963                    }
964                  ]
965                }
966              }
967            },
968            spin: {
969              range: [0.1, 1.0],
970              updater: {
971                type: ParticleUpdater.CURVE,
972                config: [
973                  {
974                    from: 0,
975                    to: 360,
976                    startMillis: 0,
977                    endMillis: 10000,
978                    curve: Curve.EaseIn
979                  }
980                ]
981              }
982            },
983          }, {
984            emitter: {
985              particle: {
986                type: ParticleType.IMAGE,
987                config: {
988                  src: $r('app.media.sun'),
989                  size: [10, 10]
990                },
991                count: this.myCount,
992                lifetime: 10000,
993                lifetimeRange: 100
994              },
995              emitRate: 3,
996              shape: ParticleEmitterShape.CIRCLE
997            },
998            color: {
999              range: [Color.White, Color.White]
1000            },
1001            opacity: {
1002              range: [1.0, 1.0],
1003              updater: {
1004                type: ParticleUpdater.CURVE,
1005                config: [
1006                  {
1007                    from: 0,
1008                    to: 1.0,
1009                    startMillis: 0,
1010                    endMillis: 6000
1011                  },
1012                  {
1013                    from: 1.0,
1014                    to: .0,
1015                    startMillis: 6000,
1016                    endMillis: 10000
1017                  }
1018                ]
1019              }
1020            },
1021            scale: {
1022              range: [0.1, 1.0],
1023              updater: {
1024                type: ParticleUpdater.CURVE,
1025                config: [
1026                  {
1027                    from: 0,
1028                    to: 2.0,
1029                    startMillis: 0,
1030                    endMillis: 10000,
1031                    curve: Curve.EaseIn
1032                  }
1033
1034                ]
1035              }
1036            },
1037            acceleration: {
1038              speed: {
1039                range: [3, 9],
1040                updater: {
1041                  type: ParticleUpdater.CURVE,
1042                  config: [
1043                    {
1044                      from: 10,
1045                      to: 20,
1046                      startMillis: 0,
1047                      endMillis: 3000,
1048                      curve: Curve.EaseIn
1049                    },
1050                    {
1051                      from: 10,
1052                      to: 2,
1053                      startMillis: 3000,
1054                      endMillis: 8000,
1055                      curve: Curve.EaseIn
1056                    }
1057                  ]
1058                }
1059              },
1060              angle: {
1061                range: [0, 180],
1062                updater: {
1063                  type: ParticleUpdater.CURVE,
1064                  config: [{
1065                    from: 1,
1066                    to: 2,
1067                    startMillis: 0,
1068                    endMillis: 1000,
1069                    curve: Curve.EaseIn
1070                  },
1071                    {
1072                      from: 50,
1073                      to: -50,
1074                      startMillis: 1000,
1075                      endMillis: 3000,
1076                      curve: Curve.EaseIn
1077                    },
1078                    {
1079                      from: 3,
1080                      to: 5,
1081                      startMillis: 3000,
1082                      endMillis: 8000,
1083                      curve: Curve.EaseIn
1084                    }
1085                  ]
1086                }
1087              }
1088            },
1089            spin: {
1090              range: [0.1, 1.0],
1091              updater: {
1092                type: ParticleUpdater.CURVE,
1093                config: [
1094                  {
1095                    from: 0,
1096                    to: 360,
1097                    startMillis: 0,
1098                    endMillis: 10000,
1099                    curve: Curve.EaseIn
1100                  }
1101                ]
1102              }
1103            },
1104          }
1105          ]
1106        }).width(300).height(300)
1107
1108      }.width(500).height(500).align(Alignment.Center)
1109    }.width("100%").height("100%")
1110
1111  }
1112}
1113```
1114![particle](figures/particle_inage_one.gif)
1115
1116### 示例3(粒子扰动场的干扰下运动轨迹发生变化)
1117
1118该示例主要演示如何通过粒子扰动场的干扰下来实现运动轨迹发生变化的效果。
1119
1120```
1121@Entry
1122@Component
1123struct ParticleExample {
1124  build() {
1125    Stack() {
1126      Text()
1127        .width(300).height(300).backgroundColor(Color.Black)
1128      Particle({
1129        particles: [
1130          {
1131            emitter: {
1132              particle: {
1133                type: ParticleType.POINT, //粒子类型
1134                config: {
1135                  radius: 10//圆点半径
1136                },
1137                count: 500, //粒子总数
1138                lifetime: 10000//粒子生命周期,单位ms
1139              },
1140              emitRate: 10, //每秒发射粒子数
1141              position: [0, 0],
1142              shape: ParticleEmitterShape.RECTANGLE//发射器形状
1143            },
1144            color: {
1145              range: [Color.Red, Color.Yellow], //初始颜色范围
1146              updater: {
1147                type: ParticleUpdater.CURVE, //变化方式为曲线变化
1148                config: [
1149                  {
1150                    from: Color.White, //变化起始值
1151                    to: Color.Pink, //变化终点值
1152                    startMillis: 0, //开始时间
1153                    endMillis: 3000, //结束时间
1154                    curve: Curve.EaseIn//变化曲线
1155                  },
1156                  {
1157                    from: Color.Pink,
1158                    to: Color.Orange,
1159                    startMillis: 3000,
1160                    endMillis: 5000,
1161                    curve: Curve.EaseIn
1162                  },
1163                  {
1164                    from: Color.Orange,
1165                    to: Color.Pink,
1166                    startMillis: 5000,
1167                    endMillis: 8000,
1168                    curve: Curve.EaseIn
1169                  },
1170                ]
1171              }
1172            },
1173            opacity: {
1174              range: [0.0, 1.0], //粒子透明度的初始值从[0.0,1.0]随机产生
1175              updater: {
1176                type: ParticleUpdater.CURVE,
1177                config: [
1178                  {
1179                    from: 0.0,
1180                    to: 1.0,
1181                    startMillis: 0,
1182                    endMillis: 3000,
1183                    curve: Curve.EaseIn
1184                  },
1185                  {
1186                    from: 1.0,
1187                    to: 0.0,
1188                    startMillis: 5000,
1189                    endMillis: 10000,
1190                    curve: Curve.EaseIn
1191                  }
1192                ]
1193              }
1194            },
1195            scale: {
1196              range: [0.0, 0.0],
1197              updater: {
1198                type: ParticleUpdater.CURVE,
1199                config: [
1200                  {
1201                    from: 0.0,
1202                    to: 0.5,
1203                    startMillis: 0,
1204                    endMillis: 3000,
1205                    curve: Curve.EaseIn
1206                  }
1207                ]
1208              }
1209            },
1210            acceleration: {
1211              //加速度的配置,从大小和方向两个维度变化,speed表示加速度大小,angle表示加速度方向
1212              speed: {
1213                range: [3, 9],
1214                updater: {
1215                  type: ParticleUpdater.RANDOM,
1216                  config: [1, 20]
1217                }
1218              },
1219              angle: {
1220                range: [90, 90]
1221              }
1222            }
1223
1224          }
1225        ]
1226      }).width(300).height(300).disturbanceFields([{
1227        strength: 10,
1228        shape: DisturbanceFieldShape.RECT,
1229        size: { width: 100, height: 100 },
1230        position: { x: 100, y: 100 },
1231        feather: 15,
1232        noiseScale: 10,
1233        noiseFrequency: 15,
1234        noiseAmplitude: 5
1235      }])
1236    }.width("100%").height("100%").align(Alignment.Center)
1237  }
1238}
1239
1240```
1241![particle](figures/disturbanceFields.gif)
1242
1243### 示例4(调整粒子发射器位置)
1244通过emitter()调整粒子发射器的位置。
1245```ts
1246@Entry
1247@Component
1248struct ParticleExample {
1249  @State emitterProperties: Array<EmitterProperty> = [
1250    {
1251      index: 0,
1252      emitRate: 100,
1253      position: { x: 60, y: 80 },
1254      size: { width: 200, height: 200 }
1255    }
1256  ]
1257
1258  build() {
1259    Stack() {
1260      Text()
1261        .width(300).height(300).backgroundColor(Color.Black)
1262      Particle({
1263        particles: [
1264          {
1265            emitter: {
1266              particle: {
1267                type: ParticleType.POINT, // 粒子类型
1268                config: {
1269                  radius: 5// 圆点半径
1270                },
1271                count: 400, // 粒子总数
1272                lifetime: -1// 粒子的生命周期,-1表示粒子生命周期无限大
1273              },
1274              emitRate: 10, // 每秒发射粒子数
1275              position: [0, 0], // 粒子发射位置
1276              shape: ParticleEmitterShape.CIRCLE// 发射器形状
1277            },
1278            color: {
1279              range: [Color.Red, Color.Yellow], // 初始颜色范围
1280              updater: {
1281                type: ParticleUpdater.CURVE, // 变化方式为曲线变化
1282                config: [
1283                  {
1284                    from: Color.White,
1285                    to: Color.Pink,
1286                    startMillis: 0,
1287                    endMillis: 3000,
1288                    curve: Curve.EaseIn
1289                  },
1290                  {
1291                    from: Color.Pink,
1292                    to: Color.Orange,
1293                    startMillis: 3000,
1294                    endMillis: 5000,
1295                    curve: Curve.EaseIn
1296                  },
1297                  {
1298                    from: Color.Orange,
1299                    to: Color.Pink,
1300                    startMillis: 5000,
1301                    endMillis: 8000,
1302                    curve: Curve.EaseIn
1303                  },
1304                ]
1305              }
1306            },
1307          },
1308        ]
1309      })
1310        .width(300)
1311        .height(300)
1312        .emitter(this.emitterProperties)
1313    }.width("100%").height("100%").align(Alignment.Center)
1314  }
1315}
1316```
1317![particle](figures/emitters.gif)